3.19
arc066_c (dp,观察)
观察:
- 只会在负号右边添加 \((/ )\)
- 两个位置之间至多一个括号。
- 括号不会嵌套多层。
\(f[i][j]\) 表示处理完 \(i\) 个数,有 \(j\) 个未匹配左括号。
因为钦定只有负号后面加括号,我们可以通过这个找到这个数的符号。
agc033_c (博弈,观察)
发现每次操作就是会让一圈叶子缩进来。
但是如果选了某个叶子操作,会保留这个叶子然后其他的缩没掉。
直径每次减 1 或 2
直接设 \(f[i] = ! f[i - 1] || ! f[i - 2]\)。初值 \(f[1] = 1, f[2] = 0\)。
agc014_d(博弈,观察)
一个我能发现的结论:高桥染一个叶子的父亲,青木则必须染这个叶子。
然后我们可以把这两个点删掉。直到最后如果存在一个点可以拿走,那么高桥就赢了。
但是不会证明充分性。(充分性:按这个策略不行走他一定输。)
但是 OIer 不需要证明。
然后就相当于求树上完美匹配。dfs,分类讨论一下。
void dfs(int x, int fa) {
for(int y:G[x]) if(y != fa) {
dfs(y, x);
}
if(!del[x]) {
if(del[fa]) {
puts("First");
exit(0);
} del[x] = del[fa] = 1;
}
}
标签:AtCoder,括号,int,练习,dfs,叶子,fa,del,记录
From: https://www.cnblogs.com/Lates/p/17238031.html