zoukankan      html  css  js  c++  java
  • 口袋里的纸飞机

    这种题都还需要看题解,丢人。。。
    考虑枚举每个数(v),求出网格中包含(v)的方案。
    考虑正难则反,使用(r^n)减去网格中不包含(x)的方案。
    这要求数列中不能存在两个数(a_x*a_y=v(mod p))
    由于(p)是奇质数,所以每个数(a_x)会对应唯一的(a_y)。特别的,当(v=0),(0)和所有数互斥。
    虽然(r)很大,但是(P)很小。我们只用关心所有数对(P)取模的值。
    考虑把所有数按照对(P)取模的值分类。
    则每个(<P)的数只可能出现(b)或者(b+1)次。
    限制可以被变成:
    某两个数(a_x,a_y)互斥,(a_x)(b,b+1)种,(b_x)(b,b+1)种选法。
    考虑使用egf描述,当(a_x)(b)(b_x)(b)种选法。
    还是考虑正难则反,求出任意-都选择的方案数,则生成函数是(e^{bx}e^{bx}-(e^{bx}-1)(e^{bx}-1)=e^{bx}+e^{bx}-1)
    把相同的项写成幂次形式。
    经过若干推导,发现答案可以使用(n![x^n](e^{bx}+e^{bx}-1)^{v0}(e^{bx}+e^{(b+1)x}-1)^{v1}(e^{(b+1)x}+e^{(b+1)x}-1)^{v2}e^{(r/P)x})表示
    最后的(e^{(r/P)x})是考虑(0)的情况
    如果暴力计算,则时间复杂度为(O(Pn^2))
    发现本质不同的(v0,v1,v2)个数不会超过(sqrt{P}),记忆化即可。
    时间复杂度(O(sqrt{P}n^2))

  • 相关阅读:
    [置顶] MapReduce 编程之 倒排索引
    java学习之路---线程(重点)
    CentOS下用Tomcat+Zookeeper+Nginx+Solr完美搭建SolrCloud平台(五)
    qsort的几种用法
    两道水题(月之数)(排序)
    快排
    Red and Black(简单dfs)
    zb的生日(暴搜dfs)
    又见01背包
    五子棋
  • 原文地址:https://www.cnblogs.com/ctmlpfs/p/14493478.html
Copyright © 2011-2022 走看看