zoukankan      html  css  js  c++  java
  • [题解]gdfzoj2145 奇怪的题目4

    传送门

    本场唯一一道自己想出的题

    洗澡的时候 (YY) 出正解

    还有别问我为什么模数是这个

    本人语文能力有限,喷轻点。。

    可以说是本场最良心的题了,没有码量,部分分也很多

    (24) 分暴力: (n^2 DP) 不讲

    (48) 分暴力:容斥 (O(k 2^k))

    想到这里的同学已经是史诗级大佬了

    易得:答案 (=) 总路径条数 (-) 非法路径条数

    考虑没有障碍的情况:没有非法路径,答案即为总路径数

    考虑有一个障碍 (A) : 答案 = 总路径条数 (-) 经过 (A) 的路径条数

    考虑有两个障碍 (A)(B)

    非法路径数 = 经过 (A) 的路径数 (+) 经过 (B) 的路径数 (-) 同时经过 (A)(B) 的路径数

    答案 = 总路径条数 (-) 非法路径数

    ...... 以此类推

    所以我们可以对障碍进行排序,再二进制枚举状态,容斥即可

    因为模数是个质数,所以两点之间的路径数可以直接用组合数求出(然后用加乘原理瞎搞

    需要注意的是有时同时经过多个点的状态不存在。这个点我在求组合数的时候顺便解决了

    正解:

    正解就是将求非法路径数的时间复杂度变为 (O(k^2))

    (path(x1,y1,x2,y2)) 表示从 ((x1,y1)) 走到 ((x2,y2)) 的路径数 (不考虑障碍)

    (g[i]) 表示从第 (i) 个陷阱,不经过其他任何陷阱,到达 ((n,m)) 的路径数

    (g[i] = path(x_i,x_j,n,m) -) 经过其他陷阱的路径数

    易得

    (g[i] = path(x_i,x_j,n,m)) $ - sumlimits_{j=i+1}^{n}{}$ (path(x_i,y_i,x_j,y_j)) ( imes) (g[j]) ( imes) ([y_j>=y_i])

    对于每一条非法路径,都至少经过一个障碍

    我们枚举每个障碍, (path(0,0,x_i,y_i) imes g[i]) 就为 经过的最后一个障碍为 (i) 的路径个数

    然后相加即为非法路径条数

    代码(巨丑无比)

    完结撒花

  • 相关阅读:
    XML的语法
    dell omsa 监控,Nrpe信号量泄露
    cx_Oracle 报错 Reason: image not found
    cx_Oracle 中文乱码问题解决
    High Memory in the Linux Kernel
    使用二分法查找mobile文件中区号归属地
    mysql 导出csv
    行删除按钮功能
    vsftp 根据用户设置
    安装zabbix报错configure: error: libcurl library not found
  • 原文地址:https://www.cnblogs.com/ZHANG-SHENG-HAO/p/12740128.html
Copyright © 2011-2022 走看看