noip 以后 AT 题选录
contests
ARC 101
首先中位数问题要想到二分
考虑验证,发现中位数的性质是大于中位数的个数不超过 \(1/2\)
那么把大于的设为 \(1\) 小于的设为 \(-1\),然后求出所有子段和即可
转化成前缀和用树状数组维护即可
ARC 102
D - All Your Paths are Different Lengths
很明显的二进制构造竟然没有想到……
二进制可以这样体现:节点 \(i\) 和 \(i+1\) 连两条边,\(0\) 和 \(2^i\)
发现这样拼凑会在 \(2^n-1\) 以上的部分不能漏掉
发现第 \(i\) 个和第 \(n\) 个节点的连边会产生 \(2^i-1\) 个连续值,那么把剩下的部分也二进制拆分即可
- 从数据范围是 \(log\) 等方面对二进制敏感
居然是个 \(dp\)……
一个非常神奇的观察是这样:首先投出一个大于 \(x\) 的值一定是不影响合法性的
那么不合法的组合一定是成对的,即 \(i\) 和 \(x-i\)
也就是说每对 \(i\) 和 \(x-i\) 中只能选一种
其中 \(x-i=i\) 的情况需要特殊考虑
设 \(f[i][j]\) 表示考虑了 \(i\) 对选择了 \(j\) 个数的方案数
那么 \(f[i][j]=f[i-1][j]+2*\sum_{k=1}^{j} f[i-1][j-k]\)
设 \(g[i][j]\) 表示考虑了 \(i\) 个没限制的数选择了 \(j\) 个的方案数
那么 \(g[i][j]=\sum_{j=0}^k g[i-1][j-k]\)
合并时有 \(f[cnt1][i]* f[cnt2][n-i]\)
考虑最后对于 \(x-i=i\) 的合并,\(f[cnt1][i]* f[cnt2][n-i-1]\)
ARC 131
又是做不出来的构造题……
首先对于三元环不是三种颜色的处理十分神奇:对于每一个点 \(i\),连向 \(1\) 到 \(i-1\) 的边颜色都是相同的,这样任意一个三元环的两条边都是从最大的点出发的也就是相同颜色
于是变成了将 \(1\) 到 \(n-1\) 分配到 \(3\) 个组里使得每个组的和相等
首先 \(n\%3==2\) 时无解,考虑其他情况的构造
可以采用随机化、\(dp\) 的方法
这里介绍纯构造:
可以手模出 \(n=6,7,9,10\) 的方案,而对于每一个 \(n\),可以划分出:\(\{n-1,n-6\},\{n-2,n-5\},\{n-3,n-4\}\),然后递归到了 \(n-6\) 的子问题,直到边界进行特判