• CF1103E Radix Sum


    CF1103E Radix Sum

    给定一个多项式 (F(x)=sum_{i=0}^{10^5} cnt_i imes x^i),对其做 (10) 进制 FWT 快速幂,模数为 (2^{58})

    ( m Sol:)

    我们先进行 DWT,然后将点值进行一下快速幂,然后 IDWT 一下就可以得到答案了。

    如果不是这个奇怪的模数,我们直接进行 ( m 10) 进制 FWT 这道题就做完了。

    由于模数的存在,我们需要解决 ( m 10) 进制 FWT 中不可避免的几个步骤。

    先把范围扩大为 ([0,10^5)),接下来我们进行的操作均在这一范围进行讨论。

    • 求解 (frac{1}{n}),此处为 (frac{1}{10})

    (5) 存在逆元,(2) 没有,由于最后计算 IDWT 时会乘以 (frac{1}{10^5}),所以我们需要找到办法计算 (frac{1}{2^5}),将 (2^{58}) 乘以 (2^5) 变成 (2^{63}),计算得到答案后就可以直接除以 (2^5) 了。

    当然直接当作 (2^{64}) 后用 unsigned long long 不香吗。

    • 得到 (omega_{10}^1)

    回顾 (k) 进制 FWT,我们需要得到对应进制的范德蒙德矩阵,其中每个元素为 (omega_{k}^{x}),此处我们需要得到 (omega_{10}^x)

    此处我们可以直接进行大力扩域,得到额外 (0) 个元素分别表示 (omega_{10}^1,omega_{10}^2,...omega_{10}^9),这样进行运算的复杂度为 (10^2),FWT 的复杂度为 (mathcal O(k^{m+2} imes m)),于是得到了一个 (mathcal O(10^2k^{m+2} m)),最终效率大概是 (5 imes 10^9) 的优秀做法。

    虽然本题开了 ( m 4s) 但也不是给这个做法过的啊 /lb

    然而写着写着你会发现每次乘的都是单项式,所以可以减少一个 (10)

    然后写完会发现最后无法得到答案,因为最后得到的是一个 (omega_{10}^x) 构成的元素组,然而实际上在 FFT/NTT 中计算会进行的消去/折半等引理都没有发生,这一部分我们需要自己手动消一下。

    大概是这样的一个式子:(omega^0-omega^5-omega^2+omega^3)

    最后算出来大概是 (5 imes 10^8),开了 ( m 4s),大致有信仰的人们是可以过的。

  • 相关阅读:
    周4早上搜索引擎分析 crmim.com| MSCRM开发者之家
    Bat命令学习
    sqlserver日期函数
    ubunto应用软件
    sql for xml
    win7x64 连接oracle 客户端 vs 2010调试 提示“ORA12154: TNS: 无法解析指定的连接标识符 ”ORA06413 问题(转)
    CentOS Rsync服务端与Windows cwRsync客户端实现数据同步
    怎么引导2岁孩子洗手问题
    Libnfcinstallation
    Asterisk资料
  • 原文地址:https://www.cnblogs.com/Soulist/p/13653574.html
Copyright © 2020-2023  润新知