哈哈,最近经常被吊打,感觉都习惯了。。。不太好(认真)
好多算法都没有学习,要多补补了。
估分:(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 = (2{a+b}+∑_{i=b+1}{a-1}C(i,a+b))/2$$
由于(a-b<=10000),所以我们可以暴力求出右边的东西。
现在的问题就是如何求(C(n,m)%10^10),我们可以用扩展lucas定理来搞。
具体看码吧。
总结
算法学习不够到位。
而且有些方法根本没有想到:
一个无根树让你求路径最大值,没有想到点分治。。。
还有一些部分分什么的,都不会打【惨】
(╥╯^╰╥)