好题记录
CF1737G
数据结构题
先讨论人全部可以移动的情况。
发现一段连续区间的人是好维护的
枚举 \([1,x]\) 的区间什么时候开始连续,只处理这一部分的询问即可
这时候只用维护循环移位,平衡树可以解决,遇到不能动跑到最末尾直接删掉。
代码被卡常了。
AT_joi2015ho_e(校内模拟赛)
正方形有一个很好的性质是可以沿着对角线枚举。
先 \(O(n^2)\) 预处理出每个点最长的左下和右上延展距离。
然后对于两个合法点 \(a,b\),满足:
- \(a_x+l \le b_x\)
- \(\min(ld_a,ru_b) \le b_x-a_x\)
这是一个二维偏序问题,建立 \((x,ld_x+x-1)\) 点即可。
P3552(校内模拟赛)
结论题
lemma 1:一个 \(n\) 维超立方体划分成两个不交子集,两个集合的边数不小于小的集合的大小
记特殊路径为从前往后经过每一条边的路径,可以发现,经过任意一条边的特殊路径为 \(2^{n-1}\)。
设集合 \(S,T\) 为题述两个集合,两个集合间的特殊路径为 \(|S||T|=|S|(2^n-|S|)\) 且 \(|S| \le \frac{2^n}{2}=2^{n-1}\),每条路径至少经过一个集合中的边,边数 \(\ge \frac{|S|(2^n-|S|)}{2^{n-1}} \ge \frac{|S|2^{n-1}}{2^{n-1}}=|S|\)
lemma 2:对于一个 \(n\) 维超立方体,去掉 \(k\) 个点后最多形成一个大小大于 \(nk\) 的连通块。
若存在两个这样的集合,中间的连边至少有 \(nk+1\)。
我们直接爆搜,搜到 \(> nk\) 个点的直接判断在主连通块里,若在相同的小联通块里,我们直接就搜到了。
CF1844G(校内模拟赛)
阴间构造题
\(d(i,i+1)=dep_i+dep_{i+1}-2dep_{lca(i,i+1)}\)
考虑倍增
\(d(i,i+1)\mod2^k=dep_i \mod 2^k +dep_{i-1} \mod 2^k + dep_{lca(i,i+1)}\mod 2^{k-1}\)
然后直接递推到 \(k=60\),判断:
- 边长为正数
- 每条边的长度正确
P3546
串串题
考虑一个非常阴间的转化:把串转换成 \(s_1s_ns_2s_{n-1}...s_{n-1}s_2s_ns_1\)。
注意到循环移位串变成了它的前两个回文串,直接马拉车就好了
注:
设这个串为 \(a_1...a_{i-1}a_i...a_kt_1...t_ma_i...a_ka_1...a_{i-1}\)
操作完为 \(a_1a_{i-1}...a_{i-1}a_1a_ia_k...a_ka_1t_1t_m...t_mt_1\)
CF1797F(校内模拟赛)
树论题
学习了 kruskal 重构树。
直接容斥答案:
- 满足第一种条件个数 \(x\)
- 满足第二种条件个数 \(y\)
- 满足任意一个条件 \(z\)
答案为 \(x+y-2z\),\(x,y\) 建大根和小根树,\(z\) 直接数点。
考虑维护加点,发现 \(y\) 增加原先树的大小和 \(z\) 增加节点深度。
CF1140
发现在平面上不太好做,考虑一个神秘转化,转化成 \(x,y\) 之间有连边。
发现最终连的边数量为左点个数*右点个数
线段树分治做完了

浙公网安备 33010602011771号