解方程(hash,秦九韶算法)
题目描述
已知多项式方程:
a0+a1x+a2x2+⋯+anxn=0
求这个方程在 [1,m]内的整数解(n 和 m 均为正整数)。
输入输出格式
输入格式:
共 n+2 行。
第一行包含 2个整数 n,m,每两个整数之间用一个空格隔开。
接下来的 n+1n+1n+1 行每行包含一个整数,依次为 a0,a1,a2…an
输出格式:
第一行输出方程在 [1,m] 内的整数解的个数。
接下来每行一个整数,按照从小到大的顺序依次输出方程在 [1,m]内的一个整数解。
思路:
有一个奇妙的东西叫秦九韶算法
(不知道的请左转百度)
然后我们看到a都很大
于是我们想到了hash
将 a hash掉
之后验证时取膜即可
代码:
// luogu-judger-enable-o2
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define rii register int i
#define rij register int j
#define p1 19260817
#define p2 23333
using namespace std;
char ai[];
long long a1[],a2[];
int ans[],n,m,cnt;
inline void c1(int wz,int len)
{
int pd=;
int fi=;
if(ai[]=='-')
{
pd=-;
fi=;
}
long long ans=ai[fi]-'';
for(rii=fi+;i<=len-;i++)
{
ans*=;
ans+=ai[i]-'';
ans%=p1;
}
a1[wz]=ans*pd;
}
inline void c2(int wz,int len)
{
int pd=;
int fi=;
if(ai[]=='-')
{
pd=-;
fi=;
}
long long ans=ai[fi]-'';
for(rii=fi+;i<=len-;i++)
{
ans*=;
ans+=ai[i]-'';
ans%=p2;
}
a2[wz]=ans*pd;;
}
inline bool check(int v)
{
long long ans=a1[n];
for(rii=n;i>=;i--)
{
ans*=v;
ans%=p1;
ans+=a1[i-];
ans%=p1;
}
if(ans!=)
{
return ;
}
ans=a2[n];
for(rii=n;i>=;i--)
{
ans*=v;
ans%=p2;
ans+=a2[i-];
ans%=p2;
}
if(ans!=)
{
return ;
}
return ;
}
inline void sr()
{
int wz=;
char l=getchar();
while(l!=)
{
ai[wz]=l;
l=getchar();
wz++;
}
}
int main()
{
scanf("%d%d\n",&n,&m);
for(rii=;i<=n;i++)
{
memset(ai,,sizeof(ai));
// scanf("%s",ai);
sr();
int ltt=strlen(ai);
c1(i,ltt);
c2(i,ltt);
}
// for(rii=0;i<=n;i++)
// {
// cout<<a2[i]<<" ";
// }
for(rii=;i<=m;i++)
{
if(check(i)==)
{
cnt++;
ans[cnt]=i;
}
}
cout<<cnt<<endl;
for(rii=;i<=cnt;i++)
{
printf("%d\n",ans[i]);
}
}
解方程(hash,秦九韶算法)的更多相关文章
- 【BZOJ】3751: [NOIP2014]解方程【秦九韶公式】【大整数取模技巧】
3751: [NOIP2014]解方程 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 4856 Solved: 983[Submit][Status ...
- NOIP 2014 D2T3 解方程 Hash大法好
题目大意:给定高次方程an*x^n+...+a1*x^1+a0*x^0=0 求[1,m]区间内有多少个整数根 ai<=10^10000.m<=100W 懒得高精,考场上写的long dou ...
- LOJ2503 NOIP2014 解方程 【HASH】
LOJ2503 NOIP2014 解方程 LINK 题目大意就是给你一个方程,让你求[1,m]中的解,其中系数非常大 看到是提高T3还是解方程就以为是神仙数学题 后来研究了一下高精之类的算法发现过不了 ...
- luogu2312 解方程 (数论,hash)
luogu2312 解方程 (数论,hash) 第一次外出学习讲过的题目,然后被讲课人的一番话惊呆了. 这个题,我想着当年全国只有十几个满分.....然后他又说了句我考场A这道题时,用了5个模数 确实 ...
- luogu2312 [NOIp2015]解方程 (秦九韶)
秦九韶算法:多项式$a_0+a_1x+a_2x^2+...+a_nx^n=a_0+x(a_1+x(a_2+...+(xa_n))..)$,这样对于一个x,可以在O(n)求出结果 为了避免高精度,我们同 ...
- Hash表算法详解
Hash表定义 散列表(Hash table,也叫哈希表),是根据关键字值(Key value)直接进行访问的数据结构.也就是说,它通过把关键字(关键字通过Hash算法生成)映射到表中一个位置来访问记 ...
- 【hash】什么是hash,什么是哈希,什么是hash散列,什么是hash一致性算法【关于hash的详解】
什么是hash,什么是哈希,什么是hash散列,什么是hash一致性算法
- luogu题解P2312解方程--暴力模+秦九韶
题目链接 https://www.luogu.org/problemnew/show/P2312 分析 这道题很毒啊,这么大的数. 但是如果多项式\(\sum_{i=0}^N a[i]*X^i=0\) ...
- [noip2014]P2312 解方程
P2312 解方程 其实这道题就是求一个1元n次方程在区间[1, m]上的整数解. 我们枚举[1, m]上的所有整数,带进多项式中看看结果是不是0即可. 这里有一个技巧就是秦九韶算法,请读者自行查看学 ...
随机推荐
- [转]Mysql几种索引类型的区别及适用情况
此为转载文章,仅做记录使用,方便日后查看,原文链接:https://www.cnblogs.com/yuan-shuai/p/3225417.html Mysql几种索引类型的区别及适用情况 如大 ...
- Thrift笔记(二)--Thrift框架分层设计
thrift架构设计使用了分层设计,类似TCP/IP分层,上次使用下层提供的服务.分层设计在计算机中是一个常用的设计,上层和下层定义好接口或者说协议,下层实现可以随意更换,只要实现好定义的接口和协议就 ...
- caffe-windows中classification.cpp的源码阅读
caffe-windows中classification.cpp的源码阅读 命令格式: usage: classification string(模型描述文件net.prototxt) string( ...
- jQuery登录倒计时
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script sr ...
- 日期函数new Date()浏览器兼容性问题
项目上与时间相关的地方特别多,与时间格式相关都使用了moment.js轻量级日期处理库,在开发中出现了几次浏览器兼容性问题,所以总结一下new Date()和moment.js在各大浏览器中兼容性问题 ...
- 我为什么不用Django而用Flask?
前言 对于初学者来说,找到一个好的框架来学习或者项目开发都是非常有必要的,而当你有一定开发经验后,你应该选择适合当前业务需要的框架.我这里并不想探讨哪个框架好哪个不好,这个永恒的话题就跟探讨“世界上哪 ...
- iDempiere 使用指南 windows下eclipse开发环境配置及打包下载
Created by 蓝色布鲁斯,QQ32876341,blog http://www.cnblogs.com/zzyan/ iDempiere官方中文wiki主页 http://wiki.idemp ...
- 某虚拟定位APP从破解到原理分析
工具环境ida7.0iphone 6ios 10.2 0x00:基本情况 1. 该app可以修改模拟手机地理位置(gps.基站.WIFI),拥有全局定位.指定应用定位.模拟扫街等功能,只能在已越狱的I ...
- jQuery Mobile 移动 web 应用程序框架
在这里我们主要讲一下如何引用jQuery Mobile(引用了jQuery Mobile,你就能引用jQuery Mobile里已经封装好的代码,让开发更加快捷简单) 从 CDN 引用 jQuery ...
- ASP.NET向MySQL写入中文的乱码问题-.NET技术/C#
1,在 mysql数据库安装目录下找到my.ini文件,把default-character-set的值修改为 default-character-set=gb2312(修改两处),保存,重新启动. ...