省流:运气好没有掉分)
B2 Bonquet(Hard Vertion) (CF1995B2)
事实上B1都写挂了(尖叫)
处理花瓣数相差不超过1的花,可以用map存储每种花的数量,顺序遍历即可(其实是不想排序统计,好麻烦);那么如何计算最终答案呢。。。此处省略我赛时乱七八糟的一堆复杂做法,比较简单的写法是先找到一个可行的解:设两种花的价格分别为 $x1,x2, $ 总量为 \(c1,c2,\)(可行)购买数量为 \(cnt1,cnt2,\) 有 \(cnt1=m/x1,cnt2=(m\% x1)/x2\) ;设此时剩余钱数为 \(y\),考虑将尽量多的 \(x1\) 替换为 \(x2\) ,使剩余钱数尽可能小,有 \(ans=m-y+max(y,min(y,c2-cnt2))\) ,最后取 \(max\) 即为最终答案。代码高亮莫名其妙寄了所以没有代码
B1就更简单了,除了这个正解,应该还有一些暴力乱搞能过,只是我没过而已)
C Squaring (CF1995C)
B1 WA之后并不抱太多希望地打开了C,然后发现好像会写?
要求通过最少次数的平方操作使序列单调不降,很明显从头到尾顺序操作即可,但多次平方可能导致数太大、无法直接操作,于是尝试把式子简化一下。设 \(a[i]\) 被操作了 \(x\) 次,即 \(a'[i]=a[i]^{2^x}\),此时若 \(a[i+1]\) 在操作 \(y\) 次后刚好不小于 \(a[i]\) ,则 \(a[i+1]^{2^x}\ge a[i]^{2^y}\) ,化简得 \(a[i+1]^{2^{x-y}}\ge a[i]\) 或 \(a[i+1]\ge a[i]^{2^{y-x}}\),依据原数组中 \(a[i]\) 与 \(a[i+1]\) 大小关系、分类讨论即可。开始打算二分答案做,接着就发现二分答案过程中仍然有超出long long范围的风险,而直接从 \(2^0 = 1\) 开始枚举,时间复杂度足够,且在题目数据范围内 \(a[i]\) 最多算到 \(2\times 10^6\) 就会跳出循环,非常的安全。赛时过了这题就没掉分了,好评()
D Cases (CF1995D)
由 \(c\le 18\) 想到状压,但这题的状态设计(至少对我这种菜鸡而言)挺抽象的,官方题解给了好些个hint,有一种解谜游戏的美,喜欢()
首先每个单词的类别(?)(暂且这么翻译吧,总比cf better翻译的“大小写”好点)只由最后一个字母决定,且每 \(k\) 个连续字母中必有一个为结尾,故题目可转化为“求一个字符集合,使每 \(k\) 个连续字母内必有该字符集合中的元素”。看上去还是很拗口,但已经初具状压dp的雏形了。
对于每个连续子串中字母的存在情况,可用前缀和预处理,复杂度为 \(O(cn)\) ,用bool数组记录与每个连续子串没有交集的最大集合(即 \(((1 << c)-1)\oplus s\)),该集合及其任意子集为不合法情况;使用状压dp倒序枚举状态,可 \(O(n)\) 求出所有不合法情况,注意特判 \(s[n]\) 位置的字符必须为结尾字符,因此不包括该字符的集合也不合法。最后遍历所有集合,合法集合中 \(__builtin_popcount(s)\) 的最小值即答案。
标签:961,字母,Codeforces,ge,cnt2,x2,x1,Round,B1 From: https://www.cnblogs.com/meowqwq/p/18326291