【题解】牛客CSP-J入门组赛前集训营2

A-昂贵的字符串

30分

由于约束,字符串同类都是相等的,所以直接按要求计算即可。

100分

我们按以下顺序进行操作即可:

  1. 将S中所有大写字母全部转换成小写,如果A,B是大写,将A,B也转换为小写
  2. 遍历字符串S,如果字符s[i]==A,则使s[i]=B。
  3. 统计不同种类的字符计算答案

B-最小差

10分

由于所有ai值相等,所以最大值和最小值相等,直接输出0即可。

40分

由于是一个排列,最开始差一定为n-1,考虑每次去掉一个最大或最小的数,那么差就会减一,因此对于一个排列,答案是n-1-k。

100分

考虑最优的方法一定是去掉了一些比较小的值,去掉了一些比较大的值,因此分别枚举最小和最大值分别去掉了多少个,由于尽可能多的去掉元素不会导致答案更大,具有单调性,所以可以O(n)枚举比较小的元素去掉了多少个,假如最小元素去掉了i个,最大元素区间k-i个即是最优的。如果把数组从大到小排序,就可以O(k+nlog2(n))解决此题。

C-价值不小于k的区间

如何计算一个区间的价值:

我们可以想到一个经典的问题

X轴上有N个点,求X轴上一点使它到这N个点的距离之和最小,输出这个最小的距离之和。

这个点就是中位数

那么我们使整个区间的数都修改成中位数操作的次数就最小了

于是我们要维护中位数小于中位数的数的和大于中位数的和

30分

乱搞,直接枚举区间,然后排序(使用辅助更快)统计即可

60分

枚举区间,然后对顶堆统计即可.

对顶堆:

模板(洛谷)

开一个大根堆和一个小根堆

我们可以以小根堆的堆顶为“分界线”

如果大于它,就加入小根堆

反之加入大根堆

如果两个堆的个数相差超过,就把多的那个堆的堆顶弹出来,加入另一个堆的堆顶

如果要求中位数的话,显然是两个堆中个数多的那一个的堆顶

100分

尺取法(双指针) + 数据结构()

我们假设区间的价值

这样的话的价值也,左端点可以选

可以使用尺取法,枚举右端点,统计答案

动态维护区间价值我们可以选用各种平衡树,也可以巧用,pb_ds

()

D-函数

首先,根据组合数公式得出f(n,r)=p(n)/p(n-r)/p(r)*p(n-r)=p(n)/p(r)
设g(l,r)=l*(l+1)*…*(r-1)*r,因此f(n,r)=g(r+1,n),特别的r==n是f(n,r)=1。

10分

因为100%100==0,因此当mod>100时,直接输出0即可,否则暴力即可,时间复杂度O(q*mod)

40分

由于模数为质数,我们可以直接与处理阶乘和阶乘的逆元,每次查询O(1)得出答案,时间复杂度O(q+n)

100分

由于模数可能不为质数,所以我们不要用到除法即可,我们用线段树维护区间连乘的值,时间复杂度O(q*log2(n))
注意此题要用到__int128或者用10000进制慢速乘

标程:
A:https://ac.nowcoder.com/acm/contest/view-submission?submissionId=41554265
B:https://ac.nowcoder.com/acm/contest/view-submission?submissionId=41554322
C:https://ac.nowcoder.com/acm/contest/view-submission?submissionId=41556320
D:https://ac.nowcoder.com/acm/contest/view-submission?submissionId=41554373
D:https://ac.nowcoder.com/acm/contest/view-submission?submissionId=41554409
D:https://ac.nowcoder.com/acm/contest/view-submission?submissionId=41554458

全部评论
作为写完提高组题来随便看下普及组的选手,评价一下这场比赛: A题签到。但是题面容易使人产生歧义,"字母A和字母B是相等的",我当成'A'和'B'相等了(雾 B题签到,不讲 D题毫无思维难度,没什么意思,完全考察普及组选手会不会写线段树(或倍增)。线段树(或倍增)也并不是普及组考点。 C应该是本场最难,看了题一眼并没有秒掉(但是C过的比D多很奇怪啊)。一段区间变成相等就是全变成中位数是一个常见的套路,回寝室想了一下,对于一个左端点,右端点是单调增的,那就很好做了。然后平衡树对于普及组选手显然是超纲了。 总结一下,希望出题人出题能考虑到普及组的知识范围,个人认为还是上一场质量较高。
7 回复 分享
发布于 2019-11-01 07:48
qwq 我是C题的出题人 我看了一下A了C题的代码,大部分是巧妙运用了set,sort等STL函数 有些是手写数据结构(居然还有人写权值线段树) 其中那个写set的和我的题解也是对上了 (不过出这种题可能真的有点毒瘤 点击查看std
1 回复 分享
发布于 2019-11-01 08:41

相关推荐

评论
4
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务