省选模拟六十一 题解

(T1)
听说DY讲过,但是咋就一点印象也没有捏
首先证明一下这道题的关键性质:
点燃一个战队后一个区间内的所有战队都会被引燃
假设(km,bm)代表最小能被直接引燃的战队
则有(bm<bx,km>kx)
假如存在一个(y(kx<ky<km))
讨论一下(b)的相对大小
(1>by<bm)
(y)以后一定会被(x)引燃
(2>bm<by<bx)
y以后一定会被(x)引燃
(3>by>bx)
(y)一定会被引燃后的(m)引燃
所以可以得出上述结论
现在问题变成了线段覆盖问题,用树状数组解决即可

(T2)
把问题转化到一个矩阵上
第一行是(T),最后一行是(S)
中间是变化过程
从后往前扫一遍(T)
维护(f[i])代表(T[i]=S[f[i]])并且(f[i]<=f[i+1](i<n))的最大位置
那么再从后往前扫一遍(T)
维护一个(f[i])的队列(注意去重)
那么对于位置i而言
队列里有且仅有(fx>i)(fx)
对答案的贡献便是队列的大小

(T3)
(f[i][j])代表一条链状态为i结尾为j的方案数 (f[i][0]=sum(f[i][j]))
(g[i][j])代表若干条链状态为i边数为j的方案数
(h[i])代表选(i)条边的方案数
(h^n)对应的第(i)(*(n*k-i)!)便是至少(i)条边的方案数
(NTT)解决即可
(n)次方可以在点值的时候乘

原文地址:https://www.cnblogs.com/AthosD/p/12629201.html