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))

  • 相关阅读:
    Java中字符串indexof() 的使用方法
    .Net Core WebApi(3)—NLog
    .Net Core WebApi(2)—Swagger
    left join 左边有数据,右边无数据
    Angular—入门环境,项目创建,导入项目
    SQLite介绍和使用
    .Net Core-类库中创建CodeFirst
    .Net Core WebApi(1)— 入门
    .Net Jpush极光推送
    Webform中的前后端分离
  • 原文地址:https://www.cnblogs.com/ctmlpfs/p/14493478.html
Copyright © 2011-2022 走看看