期望得分:60+100+10
实际得分:60+100+10
终于把自己的期望得分拿满了唔。
A. 建设城市(city)
简化题意:n个桶,m个小球,把所有小球放到桶里,每个桶中的小球个数只能是[1,k]。
很像《那一天我们许下的约定》,那题也需要求类似每次增加[1,m]的答案。
但那题除去不给饼干的天后最多只有n为2000天,$Theta(N^2)$ dp可做。
$dp[i][j]= sumlimits dp[i-1][l] j-k leq l leq j-1$
之后用组合数求解所有D天。
然而这题的n很大,dp不可做。
于是更加优秀的算法出现了:怎么学也学不会,怎么想也想不到的腊鸡容斥
我们先不管k的上限,先保证n个点都放上至少1个,应用挡板法。
把m个小球线性排布,有m-1个空,因为要分成n个区间,所以有n-1个挡板。所以有 $C_{m-1}^{n-1}$
考虑荣斥掉不合法的。
至少有一个不合法:先从m个中拿出k个,然后把剩下的m-k个分到每个桶里(保证每个桶里至少有1个),还是挡板法。然后再把k个球加进某个桶里,这样就使至少那1个桶不合法。
至少i个同理。然后奇减偶加就可以扣掉所有不合法的。
还有一个一直以来的zz误区。
组合数不一定要用Lucas哇,Lucas只是能帮你在n m很大不可打表而p可做的时候降低打表范围添加logp复杂度的哇。
B. 轰炸行动(bomb)
这题我纠结了好久的直接还是间接连通,两个都想了下,觉得直接的结论太扯了,于是开始打间接。
不难发现是在求最长链,对于scc,直接缩掉记录siz不影响。
然后反图拓扑即可,即只有我更新完全才能够更新别人。