Educational Codeforces Round 122
2022-02-01 20:31 作者:Asunataisiki | 我要投稿
突然想起已经一万年没写过题解了
题意:一个数字n,你可以对他的某些位进行更改,让n % 7 == 0,问改变最小的位数后符合条件的n是多少
思路:如果本来就是7的倍数,那就直接输出,如果不是就直接遍历个位数就可以了

B.Minority
题意:你的任务是在01字符串中找到一个子串,将0和1中数量少的删除掉,只能进行一次操作,问能删除最多的字符数量是多少
思路:如果整个串01数量不等,输出少的那个,如果相等,随便选一个的数量 - 1输出即可

C.Kill the Monster
题意:给出勇士和怪物的血量和攻击力,hc, dc, hm, dm,现在勇士可以增加k次自己w点血量或者a点攻击力,问是否能击杀怪物
思路:
注意k的范围,暴力枚举k并不会超时,所以可以枚举 0 ~ k,每次增加i点血量,k - i点攻击力。
勇士杀死怪物需要个回合
怪物击杀勇士需要个回合
所以只要 第一个小于等于第二个就成立

D. Make Them Equal
题意:你有一个初始长度为n且全为1的数组a,你可以每次选择一个数字k,使得a[i] = a[i] + a[i] / k,如果a[i]变成了b[i],那么你就可以获得c[i]的硬币,现在总共可以进行k次操作,问最多能获得多少硬币?
思路: 01背包 + 预处理, 首先注意到b[i]的范围并不大,最大只有1e3(然而我最后20分钟才注意到),所以可以先打个表预处理一下1 ~ b[i]需要的步数,这就是每一个b[i]所对应的容量,而价值就是c[i],注意到k太大了,如果直接用k跑01背包必定超时,而每个数字的容量最多就是12, 所以k最大只能取12 * n,时间复杂度为O(nk)