福建省队集训 20180708
分数就当爆零了吧,不想敲暴力,直接订正
tetris
set维护区间覆盖(均摊O(n),每个点只会被覆盖一次),然后就对两个形状有一个偏移量求重叠的高度取max
好像直接bitset+记忆化就行了。猜不透他的复杂度,反正能过
intensify
容斥再总结:
F为恰好满足所有这些条件,G为至少满足这些条件: (G_{S}=sum_{Sin T}F_{T},F_{S}=sum_{Sin T}-1^{|T|-|S|}G_T),
所有条件等价:(G_i=sum_{j=i}^n {nchoose j}F_j,F_i=sum_{j=i}^n-1^{i-j}{nchoose j}G_j)
这题里F为至少满足一个条件,并且所有条件等价,那么$ans=G_{emptyset}-F_{emptyset}=sum_n-1{nchoose j}G_j$
具体来说,设$P(t)$为时间t仍然没有结束的生成函数,(P=sum_{t=1}^m p_t)
[
p_t=sum_{i=1}^m(-1)^{i-1} {mchoose i}frac{f_{i,m-i}(t)}{m^t}
]
m^t代表所有选择,$f_{i,j}(t)$表示t个回合中都强化前$i+j$项属性,所有方案的前 (i) 项属性都不满上限的概率之和。为什么要这么表示呢?因为可以递推:
[
f_{0,j}(t)=j^t,f_{i,j}(t)=sum_{l=0}^{k-1}{tchoose l}w_l f_{i-1,j}(t-l)
]
这个式子的意思是用l个回合强化i,$w_l$表示l个回合提升总等级小于k的概率,可以用简单dp
然后$f_{i,j}(t)=F_{i,j}(t)*left(frac j m ight)^t$,$F_{i,j}(t)$是一个不超过im次的关于t的多项式(展开组合数)
由插板法,
[
egin{aligned}
frac{1}{(1-x)^{m+1}}&=left(sum_{nleq 0}x^n
ight)^{m+1}\
&=left(sum_{nge 0}inom{m+1+n-1}{n}x^n
ight)\
&=sum_{nge 0}inom{m+n}{n}x^n
end{aligned}
]
那么
[
sum_{t=0}^{infty}{tchoose k}a^t=left(frac 1{1-a}
ight)^k*a^k
]
相当于右移k位。
这提示了我们将Fijt维护成组合数多项式的形式,
[
egin{aligned}
ans&=sum_{i=1}^m(-1)^{i-1}{mchoose i}sum_{t=0}^{infty}left(frac j m
ight)^tsum_j^{infty}a_j{tchoose j}\
&=sum_{i=1}^m(-1)^{i-1}{mchoose i}sum_{j=0}^{infty}a_jsum_{t=0}^{infty}left(frac j m
ight)^t{tchoose j}
end{aligned}
]
然后j其实没有那么多项,写$infty$只是为了交换方便,可以当成后面的a都是0,那么枚举j再结合上面的式子就能算了。
关于维护组合数多项式,rqy在群里教的
[
C(t,l) * C(t-l, k) = C(t,k+l) * C(k+l,k)
]
后面的就看不懂了。
今天又是无所事事的一天