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

  • 相关阅读:
    sql 查询重复数据 删除重复数据
    echarts 仪表板指针点击事件
    Java调用webservice 天气预报
    性能优化高手 一站通关从设计到交付的性能问题
    element-ui 添加空白表格
    Linux文件管理
    Linux第五周
    Linux第四周
    Linux第三周
    Linux第二周
  • 原文地址:https://www.cnblogs.com/ctmlpfs/p/14493478.html
Copyright © 2011-2022 走看看