牛客小白月赛3

2023-01-08,

A: 我们规定元音字母有a、e、i、o、u,并且规定半元音字母y也是元音字母。 Cwbc在学习英语,XHRlyb为了让Cwbc的记忆更加深刻,于是她让Cwbc把每个字符串的所有字母都变成一个恰好不大于它本身的小写元音字母。 可是Cwbc比较贪玩,并且他想让你帮他完成这个任务。

聪明的你在仔细阅读题目后,一定可以顺利的解决这个问题!

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个,最后不能操作的人算输。

如果博弈双方都是绝顶聪明的,并且XHRlyb先手,请你来帮XHRlyb预测这一局游戏谁会获胜。 如果博弈双方谁也无法取胜,那么判定为平局。

聪明的你在仔细阅读题目后,一定可以顺利的解决这个问题!

me:博弈论?#@[email protected]!%!$#%!%!$#@[email protected]%$^.......

大佬:

维护一个多重集合,每次取出一个大于 0 的数字 p,把它删掉,然后向集合中加入 k 个 ⌊p k⌋,不能 操作的人算输。

...是向下取整的意思。。。弄懂这个符号才看明白题。。。

D:XHRlyb发明了一类数,叫做妹纸数。

假设xi∈[p,q],yi∈[u,v],且xi与yi均为整数,我们称这区间[p,q]相对于区间[u,v]的妹纸数为
XHRlyb想让Cwbc帮她快速计算多组区间(a,b]相对于区间[l,r)的妹纸数。
Cwbc显然是愿意帮助她的,但他知道你不想解决这个问题,于是就把这个问题交给了你。

聪明的你在仔细阅读题目后,一定可以顺利的解决这个问题!

me:时间浪费的不够了没看。

大佬:

F:异或

两个区间 [a,b] 和 [c,d],从他们中各任取一个,其异或值为零的概率是多少,输出一个最简分数。

。。。异或只有异或本身才会为零。

me: