【题解】牛客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

相关推荐

来,说点可能被同行“骂”的大实话。🙊当初接数字马力Offer时,朋友都说:“蚂蚁的“内包”公司?你想清楚啊!”但入职快一年后的今天,我反而对他有了不一样的看法!🔹 是偏见?还是信息差!之前没入职之前外面都在说什么岗位低人一等这类。实际上:这种情况不可至否,不能保证每个团队都是其乐融融。但我在的部门以及我了解的周边同事都还是十分好相处的~和蚂蚁师兄师姐之间也经常开一些小玩笑。总之:身份是蚂蚁公司给的,地位是自己挣的(一个傲娇女孩的自述)。🔹 待遇?玩的就是真实!试用期工资全额发!六点下班跑得快(早9晚6或者早10晚7,动态打卡),公积金顶格交。别听那些画饼的,到手的钱和下班的时间才是真的(都是牛马何必难为牛马)。🔹 能不能学到技术?来了就“后悔”!我们拥有权限直通蚂蚁知识库,技术栈多到学不完。说“学不到东西”的人,来了可能后悔——后悔来晚了(哈哈哈哈,可以不学但是不能没有)!💥 内推地址:https://app.mokahr.com/su/ueoyhg❗我的内推码:NTA6Nvs走我的内推,可以直达业务部门,面试流程更快速,进度可查!今天新放HC,之前挂过也能再战!秋招已经正式开始啦~机会就摆在这,敢不敢来试一试呢?(和我一样,做个勇敢的女孩)
下午吃泡馍:数字马力的薪资一般哇,5年经验的java/测试就给人一万出头,而且刚入职第三天就让人出差,而且是出半年
帮你内推|数字马力 校招
点赞 评论 收藏
分享
评论
4
3
分享

创作者周榜

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