猫猫 586 / 2514
\(\large{\text{A}}\) 可以把 \(a,b\) 拆开,分别统计。那么一个 \(a_i\) 的贡献就是 \(\max(n,k-i)\)。可以类似扫描线的方式处理。
\(\large{\text{B}}\) 必要的 ) 到 ( 次数就是,最小的前缀和除以 \(2\) 上取整。这个可以对于每一个前后缀处理出来再拼起来。
\(\large{\text{F}}\)+ 想把路径操作拆成前缀和什么的没有办法,所以可以把单点操作拆成两个路径操作。维护一个 set 即可。
\(\large{\text{G}}\) 可以发现如果 \(a_1,a_2,a_3\) 比较多,一定是三个一组。那么比较少的情况直接 dp 即可。
\(\large{\text{K}}\) 首先,如果要是 \(l\sim r\) 的任意的因数,一定是 \(\le r\) 的。多余的直接 \(r+nd\) 即可。在 \(\le r\) 的数 \(x\) 中,如果 \([r/x]\neq [(l-1)/x]\),那么就是有因数的。所以整数分块即可。
\(\large{\text{M}}\)++ 可以发现一定有一个组是一个数。因为如果移走,大的一边可以 \(\times 2\),显然更优。同样可以证明一个数一组的一定是最大的或者次大的。
\(\large{\text{N}}\)+ 求最大的的是简单的,但是容易重复。这个时候直接莫比乌斯反演一下就可以了。
猫猫 387 / 1979
\(\large{\text{A}}\) 简单题,直接模拟。
\(\large{\text{C}}\)+ 相当于没有绝对众数。可以枚举绝对众数的出现次数,得到答案是 \(m\sum_{i=n+1}^{2n}\binom{2n}{i}(m-1)^{2n-i}\)。这个式子可以地推,直接用 \(\binom{n+1}{k+1}=\binom{n}{k+1}+\binom{n}{k}\) 即可。
\(\large{\text{E}}\)+ 这种情况只会在第一次选中 \(i\),后面 \(i-1\rightarrow 1\) 和 \(i+1\rightarrow n\) 顺序扩散的时候才不会发生。直接求出前缀后缀的可能性就好了。
\(\large{\text{H}}\) 比较典。可以把 \(s\) 全部放在 trie 树上,那么每一次暴力哈希+二分匹配即可,预处理一个走到 trie 树上 \(u\) 节点贡献是多少。
\(\large{\text{I}}\) 反悔贪心。( 直接加入优先队列,如果是 ),可以匹配一个 ( 或者换掉一个 ),那么相当于加入 \(-c_i\)。
\(\large{\text{J}}\) 从 \(1\sim |T|\) 枚举,每一个格子是和现在前缀的编辑距离。然后 bfs 转移即可。
猫猫 387 / 1983
\(\large{\text{B}}\) \(x\) 可以表示成 \(\prod p_i^{a_i}\),相当于每一次可以拿走 \(0\sim b_i\) 个,不能全是 \(0\)。对于单个游戏,就是 \(b_i+1\) 的倍数的时候会输。其中一个游戏赢了,就可以赢。
\(\large{\text{G}}\) 首先如果固定了游戏,一定是每一次取最大的最优(我还不会证明)。那么可以模拟得知,最终结果是第 \((n+1)/2\) 大的数。统计出 \(=c,>c,<c\) 即可。
\(\large{\text{F}}\) 可以 dp,设 \(f_{i,j}\) 为 \(1\sim i\) 都满足条件,前缀最大值是 \(j\) 的概率。
\(\large{\text{I}}\) 相当于要求不能一个大一个小,直接维护大的中最小的,用 bit 即可。
猫猫 387 / 1980
\(\large{\text{F}}\)++ 第一颗树先预处理出 dfs 序,对于第二棵树可以一个一个访问到就插入,在每一个点访问完子树时就只有一个左端点限制。放在一个 segtree 上,每一个节点维护一个二元组,可以单调栈维护,询问的时候二分。
\(\large{\text{I}}\)+ 用线段树维护访问到 \(i\) 的时候,从 \(j\) 转移的权值。这个相当于段内最大值+段内长度。前者用单调栈维护,后者直接拆成 \(i,j\) 的差可以拆开加上。
猫猫 387 / 1903
好难的比赛。
\(\large{\text{C}}\)+ 容易发现是网络流,看上去是最大流/最小割。有三种边:\((1/2,i)\rightarrow (1/2,i+1)\) 和 \((1,i)\rightarrow (2,i)\)。前两种显然是选择一种走。设节点 \(i\) 表示最后一种边,相当于你可以更换你的选择。\((i,i+1,b_{i+1})\) 就是上到下,反之下到上。然后限制就是 \((x,y,c)\)。这个是一个切糕模型。
\(\large{\text{F}}\)+ 枚举左右范围,从上到下扫描。\(u\sim d\) 合法等同于:每一行连续的都是偶数个数,每一列连续的都是偶数个数。这个直接哈希维护即可。
\(\large{\text{G}}\)+ 客观评价 A 操作干啥的,发现是可以跳到一个原先相邻的节点。容易发现不会往返跳,所以相当于又连了一条边。假设决定好连哪些了,答案可以通过现在奇数度数的节点个数求出。所以直接设 \(dp_{u,p,q}\) 为 \(u\) 子树,现在字数内有没有奇数点,\(u\) 现在的 deg 是 \(q\) 的最小代价。
\(\large{\text{H}}\)++ 首先 \(x^n=\sum_{k=0}^n k!S(n,k)\binom{x}{k}\),\(S(n,k)\) 是第二类斯特林数。求期望转化为求所有的方案除以方案数。枚举子树有多少个点,方案数是 \(f(s)=\binom{n-i}{s-1}(s-1)!(n-s-1)!\)。那么总方案就是 \(\sum_s \binom{s}{k}\times f(s)\)。化简后是 \(\frac{(n-i)!}{x!}\sum_k \frac{k!}{(k-x)!}\times \frac{(n-k-1)!}{(n-i-k+1)!}\),后面的相当于在前 \(k\) 个中选择 \(x\) 个,有顺序,后面 \(n-k-1\) 个中选择 \(i-2\) 个,有顺序。那么把 \(k\) 弄掉,相当于插入一个隔板,就是 \(\binom{n}{i-1+j}\),乘上 \((i-1)!(n-i)!\)。所以就好了。
ll ans=0;
for (int j=0; j<=k; j++){ans=(ans+f[j]*C(n,i-1+j)%mod)%mod;
}
ans=ans*fac[n-i]%mod*fac[i-1]%mod*pw(fac[n-1],mod-2)%mod;
