专栏文章

警惕洛谷题解同质化问题

CF1809G题解参与者 1已保存评论 1

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
1 条
当前快照
1 份
快照标识符
@mio2qrhf
此快照首次捕获于
2025/12/02 12:24
3 个月前
此快照最后确认于
2025/12/02 12:24
3 个月前
查看原文
1-indexed
咋题解都是推式子,给一个整体 dp 做法,这个做法连模数是质数都不需要保证。
把题目中条件翻译成人话就是重排后的 aa 序列得满足 2in,aimax{a1,a2,,ai1}>k\forall 2\le i\le n,|a_i-\max\{a_1,a_2,\dots,a_{i-1}\}|>k。那么我们遇到这种排列问题第一眼肯定想想按照一个顺序加数。我们不妨从大到小加数。这样有一个好处:如果这样加了一个数导致序列不合法,那么他一定到最后都不合法了,因为加的那个数前面的 max 不会变了。
考虑你比现在这个数 xx 大的所有数都加进了序列 ww(设 ww 的大小 >1>1,否则是平凡的)。那么我们考虑分类讨论:
  • w1x>dw_1-x>d 的时候,你显然把 xx 加哪里都行;
  • w1xdw_1-x\le d 时,一定有 w2w1w_2\ge w_1。因为如果 w2<w1w_2<w_1,我们又 xw2x\le w_2,就是 w1w2dw_1-w_2\le d 也成立,显然这是不行的。因此我们一定能够把 xxw2w_2 后面、w3w_3 后面等等。
因此注意到我们不需要知道 w2w_2 等的值只需要知道 w1w_1。考虑 dp:f(i,j)f(i,j) 表示填好了 ini\sim n,这时 w1=ajw_1=a_j。我们有转移(注意把 ai=xa_i=x 放最前面的情况单独算):
  • f(i,i)=ajai>df(i+1,j)f(i,i)=\sum_{a_j-a_i>d} f(i+1,j)
  • f(i,j)=f(i+1,j)(ni1)f(i,j)=f(i+1,j)\cdot(n-i-1),当 ajaida_j-a_i\le d 时;
  • f(i,j)=f(i+1,j)(ni1)f(i,j)=f(i+1,j)\cdot(n-i-1),当 ajai>da_j-a_i>d 成立时。
答案即为 if(1,i)\sum_i f(1,i)。这样做到了平方。
优化是显然的整体 dp。发现你只需要一个区间乘,单点修,区间求和的线段树即可维护上面的转移。复杂度 Θ(nlogn)\Theta(n\log n),跑进了时限的一半。
马上加强到对小合数取模,阶乘哥们受死吧。

评论

1 条评论,欢迎与作者交流。

正在加载评论...