题意:

给出序列[a1,a2,a3,...,an][a_{1},a_{2},a_{3},...,a_{n}][a1​,a2​,a3​,...,an​],求出下列方程在区间[1,m][1,m][1,m]的解
∑i=0naixi=0\sum_{i=0}^{n}a_{i}x^{i}=0 i=0∑n​ai​xi=0

Solution:

显然只需要枚举解,然后检查解是否符合条件即可,但直接多项式求值常数太大,朴素的求值需要n(n+1)2\frac{n(n+1)}{2}2n(n+1)​次乘法和nnn次加法。秦九韶算法可以优化至nnn次乘法,nnn次加法
a0+a1x+...+anxn=0a_{0}+a_{1}x+...+a_{n}x^{n}=0 a0​+a1​x+...+an​xn=0
左式有xxx的部分提出xxx
a0+x(a1+...+anxn−1)=0a_{0}+x(a_{1}+...+a_{n}x^{n-1})=0 a0​+x(a1​+...+an​xn−1)=0
括号内的重复这个步骤,一直到
a0+x(a1+x(a2+(....+x(an))))a_{0}+x(a_{1}+x(a_{2}+(....+x(a_{n})))) a0​+x(a1​+x(a2​+(....+x(an​))))
从内到外求即可

原题ai<1010000a_{i}<10^{10000}ai​<1010000,并且检查解的时候多项式值会很大,不妨在模数下计算这个值,这样在读入aia_{i}ai​时就可以快读取模。模数多可以提高正确性,但常数会变大,代码选用了109+710^{9}+7109+7和109+910^9+9109+9两个模数

// #include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<vector>
#include<bitset>
#include<map>
using namespace std;using ll=long long;
const int N=105,inf=0x3fffffff;
const long long INF=0x3fffffffffffffff,mod1=1e9+7,mod2=1e9+9;int n,m;
ll a1[N],a2[N];bool check(int x)
{ll ret1=0,ret2=0;for(int i=n;i>=1;i--){ret1=(a1[i]+ret1)%mod1*x%mod1;ret2=(a2[i]+ret2)%mod2*x%mod2;}ret1=(ret1+a1[0])%mod1;ret2=(ret2+a2[0])%mod2;return ret1==0&&ret2==0;
}pair<ll,ll> read()
{ll ret1=0,ret2=0,flag=1;char ch=getchar();while(!isdigit(ch)){if(ch=='-') flag=0;ch=getchar();}while(isdigit(ch)){ret1=(ret1*10+ch-48)%mod1;ret2=(ret2*10+ch-48)%mod2;ch=getchar();}return flag?make_pair(ret1,ret2):make_pair(-ret1,-ret2);
}int main()
{#ifdef stdjudgefreopen("in.txt","r",stdin);#endifvector<int>ans;n=read().first; m=read().first;for(int i=0;i<=n;i++){auto tmp=read();a1[i]=tmp.first;a2[i]=tmp.second;}for(int i=1;i<=m;i++)if(check(i)) ans.push_back(i);cout<<ans.size()<<'\n';for(int i:ans) printf("%d\n",i);return 0;
}

洛谷P2312 秦九韶算法求多项式点值相关推荐

  1. [计算机数值分析]利用秦九韶算法求多项式的值

    Spring-_-Bear 的 CSDN 博客导航 例:利用秦九韶算法求 p ( x ) = x 5 − 3 x 4 + 4 x 2 − x + 1 p(x)=x^{5}-3x^{4}+4x^{2}- ...

  2. Python使用秦九韶算法求解多项式的值

    ----------喜大普奔---------- 1.董付国老师Python系列教材,亚马逊.京东.当当.天猫均有销售: 1)<Python程序设计(第2版)>(2018年5月第6次印刷) ...

  3. 洛谷P2312 解方程题解

    洛谷P2312 解方程题解 题目描述 已知多项式方程: \[a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\] 求这个方程在 \([1,m]\) 内的整数解(\(n\) 和 \(m\) ...

  4. 洛谷P2312解方程题解

    题目 暴力能得\(30\),正解需要其他的算法操作,算法操作就是用秦九韶算法来优化. 秦九韶算法就是求多项式的值时,首先计算最内层括号内一次多项式的值,然后由内向外逐层计算一次多项式的值,然后就将求\ ...

  5. 信息学奥赛一本通 1956:【11NOIP普及组】表达式的值 | 洛谷 P1310 [NOIP2011 普及组] 表达式的值

    [题目链接] ybt 1956:[11NOIP普及组]表达式的值 洛谷 P1310 [NOIP2011 普及组] 表达式的值 [题目考点] 表达式树 由带括号的中缀表达式构建表达式树 [解题思路] 思 ...

  6. 利用Kuhn-Munkras算法求最小权值匹配

    本文参考博客: http://blog.csdn.net/zhangpinghao/article/details/12242823(代码参考该博客) http://philoscience.itey ...

  7. 洛谷P2312解方程

    传送门 思路分析 怎么求解呢? 其实我们可以把左边的式子当成一个算式来计算,从1到 $ m $ 枚举,只要结果是0,那么当前枚举到的值就是这个等式的解了.可以通过编写一个 $ bool $ 函数来判断 ...

  8. 洛谷题单 算法1-3 暴力枚举

    1 First Step (ファーストステップ) 题目背景 知らないことばかりなにもかもが(どうしたらいいの?) 一切的一切 尽是充满了未知数(该如何是好) それでも期待で足が軽いよ(ジャンプだ!) ...

  9. 秦九韶算法计算多项式

    方法1:直接模拟累加. 题目条件:n为最高的次数,a数组为系数,x为给定的值. double f(int n,double a[],double x) {int i;double p=a[0];for ...

最新文章

  1. javascript、jQuery的扩展方法,扩展实例展示代码
  2. SDNU 1462.时间转换
  3. python基础代码库-Python基础数据处理库-NumPy
  4. Adobe宣布不再针对iPhone开发Flash工具
  5. IDE之Eric:Python的IDE之eric的简介、安装、使用方法之详细攻略
  6. 科大星云诗社动态20210506
  7. XCTF-Reverse:python-trade
  8. C++读取INI文件
  9. java cxf 工具_利用CXF工具开发WebService接口
  10. SharePoint 2013 中自定义WCF服务
  11. 【python基础知识】对文本数据库的一些基本操作
  12. 谷歌更新漏洞披露规则:不管补丁打没打,够90天才披露
  13. EJB3.0高速入门项目开发步骤
  14. css中如何设置字体
  15. Django:学习笔记(9)——用户身份认证
  16. 分智- 招聘,公司评论,晒工资,薪水
  17. Javascript上传图片转base64并预览
  18. 未能在sysindexes中找到数据库ID11中对象ID1的索引ID1对应的行,请对sysindexes运行
  19. Pytorch创建多任务学习模型
  20. 文明与征服北条时宗最强阵容搭配指南

热门文章

  1. ISO 16750.3-2012道路车辆电子电气部件的环境试验 第三部分
  2. Mp4 分割 怎么将mp4视频文件分割成几段
  3. 使用jquery.orgchart实现栏目树的配置与展示
  4. Excel-财务函数3
  5. AMap初级实战之二(MoveAnimation moveTo、moveAlong)
  6. matlab程序特殊符号,matlab中怎么输入特殊符号
  7. 京东管培生线上群面复盘
  8. Huffman(哈夫曼)编码及java实现
  9. Android 反编译资料
  10. Linux中通配符的使用