文章目录
- C - Many Formulas
- D - Snuke's Coloring
- E - Snuke's Subway Trip
- F - Card Game for Three
传送门
C - Many Formulas
Score : 300300300 points 爆搜
直接dfsdfsdfs爆搜即可
复杂度O(2n)O(2^n)O(2n)
代码
D - Snuke’s Coloring
Score : 400400400 points
考虑有标记的3×33×33×3的格子很少,所以直接暴力跑这些格子即可。
复杂度O(n)O(n)O(n)
代码
E - Snuke’s Subway Trip
Score : 600600600 points 优化建图 + dijkstradijkstradijkstra
经典建图了,考的n2−>nn^2->nn2−>n建图的优化
考虑对每个点延伸出max{ci}max\{ c_i\}max{ci}个点,编号为1,2,...,max{ci}1,2,...,max\{c_i\}1,2,...,max{ci},将这个点与延伸出的点连边,边权为111,让后对于边(a,b,c)(a,b,c)(a,b,c)我们将aaa延伸出的ccc号点与bbb延伸出的ccc号点连接,边权为000,此时跑dikstradikstradikstra就是答案了。
但是细心的小伙伴就发现了,上面建图不还是n2n^2n2吗?考虑每个点延伸出来的每个点不一定有用,所以删去没用的,剩下有用的个数就是O(m)O(m)O(m)级别的了。
复杂度O(mlogn)O(mlogn)O(mlogn)
代码
F - Card Game for Three
Score : 110011001100 points 组合数学 + 容斥dpdpdp
将若干操作考虑成一组操作序列,合法序列应该满足如下要求:aaa出现恰好nnn次,bbb出现≤m\le m≤m,ccc出现≤k\le k≤k,序列长度范围是[n,n+m+k][n,n+m+k][n,n+m+k],我们枚举当前的序列长度,然后考虑组合数学求出方案。
假设当前枚举的长度是iii,首先最后一次也就是第iii次一定是aaa,让后剩下的n+m+k−in+m+k-in+m+k−i个位置任意,就有3n+m+k−i3^{n+m+k-i}3n+m+k−i种,所以我们需要先从i−1i-1i−1个中选n−1n-1n−1个,这个比较简单就是(i−1n−1)\binom{i-1}{n-1}(n−1i−1),此时剩下了n−in-in−i个位置,我们需要将b,cb,cb,c都填入这几个位置,并且他们长度都满足要求。一个比较暴力的做法就是枚举bbb的长度,让后判断ccc是否符合条件,总方案就是(i−1n−1)∗3n+m+k−i∗∑x=0m[i−n−x<=k](i−nx)\binom{i-1}{n-1}*3^{n+m+k-i}*\sum_{x=0}^{m}[i-n-x<=k]\binom{i-n}{x}(n−1i−1)∗3n+m+k−i∗∑x=0m[i−n−x<=k](xi−n),但是容易发现这个复杂度是O(n2)O(n^2)O(n2)的,网上有题解说像杨辉三角。。没看出来,但是不难发现我们的问题就是从iii个里面选xxx个bbb,yyy个ccc,并且合法,那么定义f[i]f[i]f[i]代表长度为iii的时候合法的数量,转移方程: f[i]=f[i−1]∗2−(i−1m)−(i−1k)f[i]=f[i-1]*2-\binom{i-1}{m}-\binom{i-1}{k}f[i]=f[i−1]∗2−(mi−1)−(ki−1),含义是当前第iii位置可以选b,cb,cb,c,这样就是f[i−1]∗2f[i-1]*2f[i−1]∗2,但是当选bbb的时候如果i−1i-1i−1个位置里面有mmm个位置是bbb,那么就是不合法的需要减去,对于ccc同理。预处理出来之后答案就很好算了,iii位置的总方案就是(i−1n−1)∗3n+m+k−i∗f[i−n]\binom{i-1}{n-1}*3^{n+m+k-i}*f[i-n](n−1i−1)∗3n+m+k−i∗f[i−n]
复杂度O(n)O(n)O(n)
代码