2020.07.29【省选B组】模拟 总结

哈哈,最近经常被吊打,感觉都习惯了。。。不太好(认真)
好多算法都没有学习,要多补补了。
估分:\(20 + 0 + 10 + 30 = 60\)
考场:\(20 + 0 + 25 + 30 = 85\)
没有一道切了的。。。

\(T1\)

\(T2\)

\(T3\)

哈哈,其实\(T3\)理解起来还是有点难的(流汗),毕竟我想了好久。
主要是\(∑a[i]^2\)这个东西怎么算,我们有个通用(大雾)套路:转化成两个人走相同路径(即走的路的地形相同)的方案数
这样我们可以考虑记忆化+爆搜+剪枝。
我们首先枚举两人的路径方向(左上,左下,右上,右下),而由于会有重,所以要容斥减去(左,右,上,下)

记忆化+爆搜

我们设\(f[i][j][k][l]\)表示以\((i,j)\)\((k,l)\)为起点时的方案数。
则可以直接枚举方向判断是否与枚举的方向相同(左上时左也可以,所以才要枚举),然后递归进去处理下一层并返回即可。

剪枝

\(g[x1][y1][x2][y2]\)表示这两个人两种方向分别为\((x1,y1)\)\((x2,y2)\)的方案数。
显然其实\(g[x1][y1][x2][y2]=g[x2][y2][x1][y1]\),因为两个人换一下位置方案数不变。
而且\(g[x1][y1][x2][y2]=g[-x1][-y1][-x2][-y2]\),假设第一个人从\((a1,b1)\)走到\((a2,b2)\)那个从\((a2,b2)走到\)(a1,b1)$也可以是一种方案,而方向相反。
所以可以剪枝掉很多。

然后这题就切了。(微笑)

\(T4\)

没想到我竟然先改\(T4\)。。。
对于答案,我们可以搞搞搞,最后搞出来一个:

\[Ans = ∑_{i=0}^{a-1}C(i,a+b)=∑_{i=b+1}^{a+b}C(i,a+b) \]

所以我们可以发现:$$Ans = (2{a+b}+∑_{i=b+1}C(i,a+b))/2$$
由于\(a-b<=10000\),所以我们可以暴力求出右边的东西。
现在的问题就是如何求\(C(n,m)%10^10\),我们可以用扩展lucas定理来搞。
具体看码吧。

总结

算法学习不够到位。
而且有些方法根本没有想到:
一个无根树让你求路径最大值,没有想到点分治。。。
还有一些部分分什么的,都不会打【惨】
(╥╯^╰╥)

posted @ 2020-07-29 12:44  jz929  阅读(93)  评论(0编辑  收藏  举报