有些题目还不会写,留个坑吧。(我太菜了哭哭
A - Exotic … Ancient City
场未A,留坑。
B - Mysterious … Host
场未A。
原来就是不同析合树的个数,之前都没听说过, dp \text{dp} dp 一下即可。
C - Heretical … Möbius
场A(-3)。
事实上写的暴力。
通过打表发现可以先判掉 1 1 1 很多或者很少的情况。
考虑 μ i = 0 \mu_i=0 μi=0 是因为 i i i 有平方因子,由于给定串的总长很小所以先考虑 4 , 9 , 25 , 49 4,9,25,49 4,9,25,49 的倍数,我们可以枚举每 4 4 4 位都为 0 0 0 ,每 9 9 9 位都为 0 0 0 等等的一些起始位置,那这个起始位置模这些数就确定了,也就是我们可以知道这个起始位置模 44100 44100 44100 的值 x x x ,然后再去判断 x + 44100 k x+44100k x+44100k 可不可以就行了。
判断的话先判断 121 121 121 和 169 169 169 的位置,然后再去判断这 200 200 200 个数合不合法。
复杂度玄学,能过。
D - Deja vu of … Go Players
场1A。判断 n , m n,m n,m 大小即可。
E - Immortal … Universe
场未A,场后听题解过。有点点难讲。
如果只有一个串,那就是要求前缀最小值 ≥ 0 \ge 0 ≥0 。
现在有两个串,如果两个前缀最小值都 ≥ 0 \ge 0 ≥0 ,那就合法。假设第一个串的前缀最小值为 − k -k −k ,那么我们考虑第二个串前 k k k 个数一定要填 V \text{V} V ,且 [ k + 1 , n ] [k+1,n] [k+1,n] 这些位置的和要 ≥ 0 \ge 0 ≥0 ,这些位置的前缀最小值要分讨一下,如果第一个串的前缀最小值为总和,则要 ≥ 0 \ge 0 ≥0 ,否则只要 ≥ − 1 \ge -1 ≥−1 即可。具体可以画出坐标系,从 ( 0 , 0 ) (0,0) (0,0) 出发,向右为选一串,向上为选二串,然后有黑点和白点,黑点表示不能到达的点。而如果一个白点上右都不能走的话那就是不合法的。所以我们要让每个白点都能走。
这样我们考虑倒着 dp \text{dp} dp 即可: f i , j , 0 / 1 f_{i,j,0/1} fi,j,0/1 表示 [ i , n ] [i,n] [i,n] 这些位置的前缀最小值为 j j j ,和是否为前缀最小值的方案数。
效率: O ( n 2 ) O(n^2) O(n2) 。
F - Interstellar … Fantasy
场A(-2)。能沿着线段走就直接走,不能的话就沿着切线走,再走圆弧,最后再沿着切线走即可。
G - Omnipotent … Garland
场未A。没看。留坑。
H - Saintly … Coins
场未A。没看,听说是很难的模拟。
I - Misunderstood … Missing
场1A。
每次加都是对后面的操作造成影响,所以考虑倒着 dp \text{dp} dp 。
f i , j , k f_{i,j,k} fi,j,k 表示 [ i , n ] [i,n] [i,n] 轮,发动了 j j j 次攻击,攻击的下标和为 k k k 的最大攻击总和。
然后枚举第 i i i 轮做了哪个操作即可。
效率: O ( n 4 ) O(n^4) O(n4) 。
J - Philosophical … Balance
场1A。
根据纳什均衡的思想,我们希望分配 p k p_k pk 后,对于每个 j j j ,我们让 ∑ p k lcp ( s k , s j ) \sum p_k \text{lcp}(s_k,s_j) ∑pklcp(sk,sj) 尽量相等。
看到 lcp ( s k , s j ) \text{lcp}(s_k,s_j) lcp(sk,sj) 就会想到反串后建后缀自动机得到 parent \text{parent} parent 树,于是我们考虑遍历这棵树,对于每个子树,我们要对 np \text{np} np 类节点分配 p p p 使得他们的总和为 1 1 1 并且在这个子树内的那个值相等,对于 i i i 子树,我们记这个值为 f i f_i fi 。
考虑到如果根节点 i i i 就是 np \text{np} np 类节点,那么无论 p p p 怎么分配,这个点在这个子树内的值就是 l e n i len_i leni ,那我们就可以让这个点的 p p p 为 1 1 1 ,其它的 p p p 为 0 0 0 ,这样每个点的值都为根节点的 l e n i len_i leni ,故 f i = l e n i f_i=len_i fi=leni 。
然后如果根节点 u u u 不是 np \text{np} np 类节点,那我们可以对它每个子树分配 p p p ,且 p p p 的和为 1 1 1 ,那么每个子树 i i i 的值会变成 p i f i + ( 1 − p i ) l e n u p_i f_i+(1-p_i)len_u pifi+(1−pi)lenu ,变形一下就是 p i ( f i − l e n u ) + l e n u p_i(f_i-len_u)+len_u pi(fi−lenu)+lenu ,可以把 p p p 看成 x x x ,这个值看成 y y y ,那每个子树的截距都相同,斜率都为正,因此我们可以二分最终 u u u 子树的点的值都会变成什么,然后比较一下 p p p 的和和 1 1 1 的大小即可。
效率: O ( n log n ) O(n\log n) O(nlogn) 。
K - Desperate … Fire Survive
场未A,场后听题解A。
设 f i , j = m i n r + 1 f_{i,j}=min{r}+1 fi,j=minr+1 , r r r 表示 [ i , r ] [i,r] [i,r] 可以表示出 j j j 的右端点。那么 f i , j = m i n ( f f i , j − 1 , j − 1 , n e x t i , j + 1 ) f_{i,j}=min(f_{f_{i,j-1},j-1},next_{i,j}+1) fi,j=min(ffi,j−1,j−1,nexti,j+1) ,其中 n e x t i , j next_{i,j} nexti,j 表示 ≥ i \ge i ≥i 的第一个 = j =j =j 的位置。
于是离线,考虑到对于每个 j j j , dp \text{dp} dp 值相同的都是连续的一段,且 dp \text{dp} dp 值不降,所以我们可以考虑把 dp \text{dp} dp 值相同的放在一起转移。
发现段数总和是 n log m n\log m nlogm 级别的。于是做完了。
L - Eventual … Journey
场A(-1)。每个点到其他点的答案只有可能是 1 , 2 , 3 1,2,3 1,2,3 ,分讨即可。