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\) \()\) 左右。好像比它小,反正上界都能过就肯定能过。

posted @ 2020-09-11 17:48  daduda  阅读(91)  评论(0)    收藏  举报