zoukankan      html  css  js  c++  java
  • 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}{a-1}C(i,a+b))/2$$
    由于(a-b<=10000),所以我们可以暴力求出右边的东西。
    现在的问题就是如何求(C(n,m)%10^10),我们可以用扩展lucas定理来搞。
    具体看码吧。

    总结

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

    转载需注明出处。
  • 相关阅读:
    java学习(19-IO高级)
    java学习(18-异常)
    java学习(17-Map和Set)
    java学习笔记(16-集合)
    java学习笔记(15-高级api)
    java学习笔记(14-包和权限修饰符)
    Deno文件处理详解:如何写入文件、如何读文件、如何创建删除以及检查文件和目录。
    2020年12月8日建站随笔:IPlayIO中文网从上线到现在的一些总结
    2020 FreeBSD如何更换国内仓库源
    推荐11个值得研究学习的Python开源项目(从入门到python高级开发)
  • 原文地址:https://www.cnblogs.com/jz929/p/13396443.html
Copyright © 2011-2022 走看看