2025.2.26

2025.2.26 模拟赛

capella

容易想到每次加一个点 \(x+1\) 的网络流模型:

  1. 源点向 \(1-x\) 连边
  2. \(1-x\) 向还没有的颜色连边
  3. 颜色向汇点连边

但是这样容易提前连出一个完全图,就会误判无解。

感受上,我们希望连边尽量平均,即尽量连当前较少的颜色。

于是给颜色到汇点的边赋上这个颜色的出现次数,跑费用流,\(O(m^4)\) 跑的飞快。

题解大概用另一种建模方式给出了这个贪心的证明。

pubaba

看不懂题解写的什么玩意...或许是证明贪心正确性?

key:在尽量给靠后的人前提下,\(ans_i=\left\lfloor \frac{ ct_{[i,n]}}{n-i+1}\right\rfloor\)

调整法易证,平均一定是最好安排的,且一定不能再安排更多的题目。

先满足 \(l_i\),然后对 \([l_i+1,r_i]\) 区间加,\(i=1-n\) 依次尝试给 \(n-i+1\) 增加题目,总题量到达 \(S\) 停止。

实现非常容易,差分即可,常数极小的 \(O(n+m)\)

rectangle

2024.11.19 做过

容斥 + 扫描线 码力题

将每个矩形看作一个点,有交的矩形之间连边,问题转化为求有多少个 \((i,j,k)\) 的生成子图没有边。

考虑容斥,用所有三元组的数量减去有边的三元组的数量。记有 \(1\) 条边的个数为 \(c_1\)\(2\) 条边的个数为 \(c_2\)\(3\) 条边的个数为 \(c_3\),答案为 \({n \choose 3} - c_1 -c_2 -c_3\)

step1:用度数 \(d_i\) 求出 \(c_1+c_2\)

  • 至少有一条边时(选一个点 \(i\),再选一个与 \(i\) 相连的点 \(j\),再随便选一个点 \(k\)):\(\sum d_i(n-2)=2c_1+4c_2+6c_3\)
  • 至少有两条边时(选一个点 \(i\),再选两个与 \(i\) 相连的点 \(j,k\) ):\(\sum {d_i \choose 2} =c_2+3c_3\)

step2:扫描线求出 \(d_i\)

考虑正常的从左往右扫,此时可以保证横向全都有交,只需考虑纵向。

\((a,b)\) 纵向有交 当且仅当 \(yl_b\le yr_a\)\(yr_b \ge yl_a\)(已知两两不同)

故用 \(\le yr_a\)\(yl\) 数量减去 $< yl_a $ 的 \(yr\) 数量,最后再减掉自己即可。

横向扫描线就是对 \(xl\le xr_a\)\(xr<xl_a\) 分别计算,保证横向有交。

step3:容斥求出 \(c_3\)

考虑在 \(xl\) 最大的位置统计三元组,不妨为 \(i\)

从与 \(i\) 有交的点中选 \(j,k\),再减去 \(j,k\) 不交的情况。

发现此时 \(xl_j\le xl_i\le xr_j\)\(xl_k\le xl_i\le xr_k\),即 \(j,k\) 横向必有交,故只需考虑纵向。

不妨令 \(yr_j<yl_k\),则必有 \(yl_i\le yr_j<yl_k\le yr_i\),可以用线段树维护。

附:线段树维护信息
\((a,b,c)\) 表示区间内有 \(a\)\(yr\)\(b\)\(yl\)\(c\)\(yr<yl\)
合并时 \(a,b\) 直接相加,\(c\) 要加上左边的 \(a\) 乘右边的 \(b\)

posted @ 2025-05-08 17:27  Cindy_Li  阅读(35)  评论(0)    收藏  举报