Codeforces Round #498 (Div. 3)
ABC咕咕咕
D. Two Strings Swaps
有两个字符串 \(a,b\),长度 \(=n\),可以交换任意次 \((a_i,b_i)\),\((a_i,a_{n-i+1})\),\((b_i,b_{n-i+1})\),问至少修改 \(a_i\) 中的几个字符才能让 \(a,b\) 相等。
\(n\leq 10^5\)
题解:
发现 \(a_i\),\(a_{n-i+1}\),\(b_i\),\(b_{n-i+1}\) 之间可以任意交换。
最终要有两组对应相等,贪心构造一下。
均不相等 \(ans+=2\),有一组相等 \(ans+=1\),两组相等 \(ans+=0\)。
\(O(n)\)
E. Military Problem
给一棵树,\(n\) 个点,\(q\) 次询问 \(u\) 子树里 dfs 序第 \(k\) 大的点,没有输出 \(-1\)。
\(n,q \leq 2\times 10^5\)
题解:
由于 \(dfs\) 的时候子树内 dfs 序是连续的,所以所求点的 \(dfs\) 序就是 dfn[u]+k-1。
处理出来每个点的 dfs 序以及子树大小(用来判无解),以及每个 dfs 序对应的节点编号即可。
\(O(n+q)\)
F. Xor-Paths
有一个 \(n\times m\) 的矩阵,问有几个从 \((1,1)\) 到 \((n,m)\) 的最短路径上权值的 \(\text{xor}=k\)。
\(n,m\leq 20\),\(k\leq 10^{18}\)。
题解:
meet-in-the-middle
由于路径要最短,所以每走一步 \(x,y\) 坐标的和会 \(+1\)。
先枚举所有 \((1,1)\) 到 \((x,y)\) 的路径,其中 \(x+y=\frac{n+m+2}{2}\),算出它们的异或和,并存到 map 里面。
再枚举所有 \((x,y)\) 到 \((n,m)\) 的路径,其中 \(x+y=\frac{n+m+2}{2}\),算出它们的异或和,去 map 里统计答案。
\(O(\) 大概 \(2^{20}*20\) \()\) 左右。好像比它小,反正上界都能过就肯定能过。
浙公网安备 33010602011771号