好题记录

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\) 之间有连边。

发现最终连的边数量为左点个数*右点个数

线段树分治做完了

posted @ 2025-05-06 16:12  back_find  阅读(28)  评论(0)    收藏  举报