聪明的你在仔细阅读题目后,一定可以顺利的解决这个问题!
me:
开始还wa了一发。。。
大佬:
用常量数组代替复杂的if询问判断。
B.
XHRlyb和她的小伙伴Cwbc在玩捉迷藏游戏。
Cwbc藏在多个不区分大小写的字符串中。
好奇的XHRlyb想知道,在每个字符串中Cwbc作为子序列分别出现了多少次。
由于Cwbc可能出现的次数过多,你只需要输出每个答案对2000120420010122取模后的结果。
聪明的你在仔细阅读题目后,一定可以顺利的解决这个问题!
me:这题一开始写的遍历查询身后的子序列。不出意料的TLE。
大佬1:
前缀和思想。a,b,c,d分别记录c,w,b,c出现的次数。当出现w时,能凑成的数目应该为前面有多少c;同理,当出现b时,能凑成的数目应该为前面有少个cw的组合;求最后的次数时,能凑成的数目应该为前面有多少个cwb的组合。每次求余。
注意abcd为 LL,否则卡75;
大佬2:
dp,滚动数组
令 f[i][j],(j = 1,2,3,4) 表示前 i 个字符中,匹配了字符串”cwbc” 的前多少位,那么有转移方程:
f[i][1] = (f[i−1][1] + (s[i] ==′ c′)) % Mod
f[i][2] = (f[i−1][2] + (s[i] ==′ w′)∗f[i−1][1]) % Mod
f[i][3] = (f[i−1][3] + (s[i] ==′ b′)∗f[i−1][2]) % Mod
f[i][4] = (f[i−1][4] + (s[i] ==′ c′)∗f[i−1][3]) % Mod
内存超标。使用滚动数组优化开销:
f[1] = (f[1] + (s[i] ==′ c′)) % Mod
f[2] = (f[2] + (s[i] ==′ w′)∗f[1]) % Mod
f[3] = (f[3] + (s[i] ==′ b′)∗f[2]) % Mod
f[4] = (f[4] + (s[i] ==′ c′)∗f[3]) % Mod
(。。。好像变为一维和大佬1思路是一样的啊。。。大佬的思路总是不约而同,菜鸡的思路总是千奇百怪。。。QAQ)
C:XHRlyb在和Cwbc玩游戏。
在一个多重集合中有在[l,r]中的全部整数各一个,即l,l+1,l+2,......,r。
每次XHRlyb和Cwbc可以选择一个大于0的数字p,把p从多重集合中删去,然后向集合中加入k个,最后不能操作的人算输。
聪明的你在仔细阅读题目后,一定可以顺利的解决这个问题!
me:博弈论?#@$@!%!$#%!%!$#@!$!@%$^.......
大佬:
维护一个多重集合,每次取出一个大于 0 的数字 p,把它删掉,然后向集合中加入 k 个 ⌊p k⌋,不能 操作的人算输。
...是向下取整的意思。。。弄懂这个符号才看明白题。。。
D:XHRlyb发明了一类数,叫做妹纸数。
Cwbc显然是愿意帮助她的,但他知道你不想解决这个问题,于是就把这个问题交给了你。
聪明的你在仔细阅读题目后,一定可以顺利的解决这个问题!
me:时间浪费的不够了没看。
大佬:
F:异或
两个区间 [a,b] 和 [c,d],从他们中各任取一个,其异或值为零的概率是多少,输出一个最简分数。
。。。异或只有异或本身才会为零。
me: