T1. 排水系统
拓扑排序 + 高精。
T2. 字符串匹配
题意:给你一个长度为字符串 S,求对 S 的划分个数,使得 S=(AB)iC,其中 (s)i 表示将 s 复制 i 遍拼接,A,B,C 均为非空字符串。
多组数据。T≤5,∣S∣≤220。
枚举倍数调和级数是 O(nlnn+26n) 或者 O(nlnnlog26) 的。
扩展 KMP 可以做到 O(n)。
T3. 移球游戏
题意:有 n+1 根柱子,前 n 根柱子上每根有 m 个球。所有 n×m 个球共 n 种颜色,每种颜色 m 个。
你可以对当前局面进行以下操作若干次:
最后使得将相同颜色的球最后全部放置在相同柱子上。操作过程中需要满足:
-
原来的柱子上至少有 1 个球。且
-
新的柱子上至多有 m−1 个球。
请你给出一种操作次数 ≤820000 的方案。保证方案存在。
2≤n≤50,2≤m≤400。
我们定义『切分』操作为:对于两根柱子 X,Y,我们可以用一根满柱 H 和一根空柱 E,将它们的较小的一半元素放在 X,较大的一半元素放在 Y。这一步操作次数 ≤5m。
考虑归并排序,按照 maxX 的大小归并,这样会有 ≤L 次切分和 ≤2L 次整体移动,总操作次数 7n⌈log2n⌉m=840000,优化一下切分操作就能过了。
注意特判 n=2,因为此时切分操作选不出来 H。
代码还在咕咕咕。
T4. 微信步数
题意:k 维空间内的每一个点可以用 (a1,a2,⋯,ak) 表示,规定地图中第 i 维的 坐标是整数,且满足 1≤ai≤wi。
在 P=∏i=1kwi 天的时间中,小 C 每天会选择一个不同的坐标出发,并循环地走 n 步直到出界。第 i 步用两个整数 ci,di 表示,代表小 C 会将当前坐标的第 ci 维加上 di(di∈{1,−1})。
求 P 天移动的总步数,答案对 109+7 取模。若出现某天小 C 无法结束移动,输出 -1
。
两类数据范围:
设走了 i 步后第 j 维经过坐标的最大值为 r(i,j),最小值为 l(i,j),那么答案为
i=1∑nj=1∏k[wj−(r(i,j)−l(i,j))]
每 n 步为一个周期,那么第 x 个周期的答案为
f(x)=i=1∑nj=1∏k[wj−(r(n,j)−l(n,j))−c(i,j)−(x−2)c(n,j)]
其中 c(i,j) 表示第 i 个周期走了 i 步后第 j 维坐标的变化量。
f(x) 是一个 k+1 次多项式,用拉格朗日插值即可求出。暴力枚举 x 可以过官方数据。()