多项式(polynomial)

题目大意:

给出一个 n 次多项式

\(f(x)=\sum_{i=0}^na_ix^i\)

对于\(k ≤ x ≤ k + l − 1\) 的\(l\) 个\(x\),分别求出\(f(x)\) 的值。由于答案可能会很大,你只需:输出\(f(x) \space mod \space 10^m\)的结果。

第一行共四个整数\(n, k, l,m\),中间用一个空格隔开,含义如题意所述。接下来\(n+1\)行,每行一个整数,依次给出了\(an, an−1, . . . , a0\)。

  • 【算法要点】

    • 高精度运算差分
  • 【算法一】
    • 有10%的数据,所有数字都在 \(10^9\) 以内,直接做就行了。
    • 时间复杂度 \(O(nl)\),期望得分 \(10\) 分。
  • 【算法二】
    • 由于答案是模 \(10^m\) 的,所以把所有数都模 \(10^m\) 答案不变。于是现在所有数字都在 \(10^{18}\) 以内,直接做就行了。不过可能会遇到两个\(10^{18}\) 以内的数相乘,如果不想写高精度就用快速乘算法。
    • 时间复杂度 \(O(nl \log_2(10^{18}))\),期望得分 \(30\) 分。
  • 【算法三】
    • 写高精度,并压位。
    • 时间复杂度 \(O(nl({m \over w})^2)\),其中 \(w\) 为压的位数。期望得分 \(60\) 分。
  • 【算法四】
    • 把算法三中的高精度乘法用FFT等算法实现。
    • 时间复杂度 \(O(nl{m \over w} \log_2m)\),常数超大,期望得分 \(60 \sim 80\) 分。
  • 【算法五】(标准算法)
    • 本题的关键是通过差分把乘法转化成加减法。
    • 把 \(f(x)\) 差分,即令多项式 \(g(x) = f(x + 1) - f(x)\),得到的 \(g(x)\) 是一个 \(n - 1\) 次多项式,不妨定义其为 \(f^{(n-1)}(x)\) 。
    • 同理,差分两次后得到一个 \(n-2\) 次多项式,设其为 \(f^{(n-2)}(x)\)
    • ……
    • 这样下去,差分 \(n\)次后就能得到一些常数。
    • 令\(a[i][j] = f(i)(-1+j)\),首先暴力做 \(n+1\) 次算出 \(a[n][1] ∼ a[n][n+1]\)。
    • 然后根据 \(a[i - 1][j] = a[i][j + 1] - a[i][j]\),可以对每个 \(a[i]\) 算出前 \(i + 1\) 项。
    • 由于 \(a[0][j]\) 都是常数,所以对于 \(j > i + 1\) 的,根据 \(a[i][j] = a[i][j - 1] +a[i - 1][j - 1]\),就可以推出\(a[i]\) 的前 \(l\) 项。这里只做了 \(O(nl)\)次加法运算。时间复杂度 \(O(n^2({m \over w})^2 + nl{m \over w})\),期望得分 \(100\) 分。

最新文章

  1. LeetCode——Copy List with Random Pointer(带random引用的单链表深拷贝)
  2. hibernate缓存机制详细分析 复制代码 内部资料 请勿转载 谢谢合作
  3. c#中各类日期的计算方法,收藏
  4. [HTML5] 飞龙天惊-HTML5学习系列
  5. Remember-Me功能
  6. 三栏布局的n种实现
  7. 用SharedPreferences保存List(Map(String, String))数据
  8. JS判断终端(Android IOS)
  9. Java[4] Jetty工作原理介绍(转)
  10. 存储结构与邻接矩阵,深度优先和广度优先遍历及Java实现
  11. vue+vuecli+webapck2实现多页面应用
  12. java 代理模式(静态代理、动态代理、Cglib代理) 转载
  13. PHP涉及到的英文单调
  14. node.js 的页面渲染方法ejs
  15. 死磕nginx系列--nginx服务器做web服务器
  16. C语言头文件的使用(转载)
  17. C# 关于out和ref的问题
  18. java 正则表达式验证
  19. 20145301《网络对抗》Exp2 后门原理与实践
  20. 如何在IAR工程中创建和使用模板

热门文章

  1. vscode 1.32.x按下鼠标左键无法拖曳选择,而旧一点的版本1.30.2可以
  2. 取消Ubuntu开机硬盘自检
  3. k8s笔记0528-基于KUBERNETES构建企业容器云手动部署集群记录-4
  4. Linux centos7 -bash: pstree: 未找到命令
  5. Git使用教程四
  6. springboot通过AOP和自定义注解实现权限校验
  7. MySQL——MySQL安装
  8. IKEv2协议协商流程: (IKE-SA-INIT 交换)第一包
  9. jdbcTemplate快速入门
  10. JDBC使用案例