【题解】牛客网NOIP赛前集训营-普及组(第八场)

A回文串
按照长度的奇偶性,回文串有两种类型:
长度为偶数的回文串 所有字母出现次数都为偶数
长度为奇数的回文串 除了最中间的字母出现次数为奇数 其他都是偶数

我们枚举最后得到的回文串的长度的奇偶性。如果是奇数,还需要枚举最中间的字母是什么。总共27种情况。
对于每种情况,由于最终每个字母的出现次数的奇偶性确定了,所以插入哪些字母也就确定了。
除了最中间的位置,将字符串左半边按照字母从小到大的顺序排序,右半边由左半边对称得来。


B闹钟
首先只有当N为奇数且K=0时无解,否则一定有解。
考虑对于每个学号的人,如何判断学号为x的人有没有可能成为单身狗:
设cntl=x-1为学号比ta小的人数,cntr=n-x为学号比ta大的人数。
若cntl=1或cntr=1,由于不存在两个学号相邻的单身狗,所以学号为x的人一定不是单身狗,因为学号为1或者学号为n的人只可能与x成为cp。
否则,我们考虑当x为单身狗的时候,剩下来最少能有几只单身狗:
发现按照…(x-4,x-3),(x-2,x-1),x,(x+1,x+2),(x+3,x+4)…这样配对一定是最优的。
那么若x为单身狗,整个班级中至少有(cntl mod 2)+(cntr mod 2)+1只单身狗。若K大于等于这个值,那么x就有可能成为单身狗。
N<=100时暴力计算即可。
N大的时候,当cntl和cntr都大于1时,可以按照cntl与cntr的奇偶性分类快速计算。
也可以按照N和K分情况讨论。需要注意一些corner case,比如N=3,K=1。

C bananice
将问题转化为有多少个小于X的数闪耀点数为K。最终答案为小于R+1的减去小于L的。
注意到一个数小于X,要么它的位数小于X的位数,要么从高位到低位比较,一定存在一个位置,满足这个位置之前的位置上的数码都相等,且这个位置上这个数的数码小于X的数码。
我们可以把小于X的数字分成O(n)类: (n为X的位数)
若X=233
?  ??  1??  20?  21?  22?  230  231  232
每一类数都是一个前缀的数码被确定了,其他数码随便填的形式。
对于每一类数,我们分别计算闪耀点数恰好为K的个数。
我们计算出前缀中有多少个数码是闪耀的,那么就可以知道问号中有几个数码要求是闪耀的。假设10个数码中闪耀的数码个数为c,问号中要求a个数码闪耀,b个数码不闪耀,那么方案数为C(a+b,a)*(c^a)*((10-c)^b)。
预处理阶乘以及阶乘的逆元后,可以做到O(1)计算组合数模意义下的值。

D买东西
可以发现如果所有物品的价值和重量都确定了,那么题目就变成了一个经典的二分问题。
二分答案 ans ,问题转化为判断是否存在一个大小是 k 的集合 S 满足 wi的和/vi的和>=ans,可以转化为 wi-vi*ans的和>=0,直接按照这个值对每个物品排序即可,复杂度为 O(n log n log T) ,其中 T 为二分的值域大小。
对于原来的题目,我们发现无论使用多少次仙术,最终的局面都可以用下面的方法等价:先决定是否使用第一种仙术,再决定使用多少次第二种仙术。由于第二种仙术连续使用至少 n 次都是没有意义的,等价的局面数就是 2n 个。
如果我们先枚举这 2n 个局面,并对每个进行二分,复杂度为 O(n^2 log n log T) 。我们考虑如何减少二分次数,为此,在枚举前先对每个局面判断是否会使答案变大。这里的判断可以用当前的最优答案进行二分之后的操作,复杂度为每次 O(n log n) ,并对每个会使答案变大的局面进行二分,否则就直接跳过这个局面。
一个结论是,如果我们随机打乱枚举局面的顺序,期望需要二分的局面个数是 O(log n) 的。因此我们这样做的复杂度就是期望 O(n^2log n+nlog nlog T) 的。注意到复杂度只在后一部分有期望,而后一部分的远小于前一部分,所以退化的可能性是非常低的。
当然可以用类似快速排序的做法把排序的log去掉。然而由于n远小于T,暴力枚举加上这个优化仍然会超时。

std

全部评论

相关推荐

真tmd的恶心,1.面试开始先说我讲简历讲得不好,要怎样讲怎样讲,先讲背景,再讲技术,然后再讲提升多少多少,一顿说教。2.接着讲项目,我先把背景讲完,开始讲重点,面试官立即打断说讲一下重点,无语。3.接着聊到了项目的对比学习的正样本采样,说我正样本采样是错的,我解释了十几分钟,还是说我错的,我在上一家实习用这个方法能work,并经过市场的检验,并且是顶会论文的复现,再怎么不对也不可能是错的。4.面试官,说都没说面试结束就退出会议,把面试者晾在会议里面,丝毫不尊重面试者难受的点:1.一开始是讲得不好是欣然接受的,毕竟是学习。2.我按照面试官的要求,先讲背景,再讲技术。当我讲完背景再讲技术的时候(甚至已经开始蹦出了几个技术名词),凭什么打断我说讲重点,是不能听出人家重点开始了?这也能理解,每个人都有犯错,我也没放心上。3.我自己做过的项目,我了解得肯定比他多,他这样贬低我做过的项目,说我的工作是错误的,作为一个技术人员,我是完全不能接受的,因此我就和他解释,但无论怎么解释都说我错。凭什么,作为面试官自己不了解相关技术,别人用这个方式work,凭什么还认为这个方法是错的,不接受面试者的解释。4.这个无可厚非,作为面试官,不打招呼就退出会议,把面试者晾着,本身就是有问题。综上所述,我现在不觉得第一第二点也是我的问题,面试官有很大的问题,就是专门恶心人的,总结面试官说教,不尊重面试者,打击面试者,不接受好的面试者,技术一般的守旧固执分子。有这种人部门有这种人怎么发展啊。最后去查了一下,岗位关闭了。也有可能是招到人了来恶心人的,但是也很cs
牛客20646354...:招黑奴啊,算法工程师一天200?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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