题目链接:https://www.luogu.org/problem/show?pid=2312

这题一开始是这么考虑的:如果f(x)!=0,那么f(x)%k一定也不等于0
这样可以进行检验,选取若干个k使得解的范围缩小,
最后用高精度一一进行验证。

70分

#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<vector>
#define MAXN 105
#define SIZE 10025
#define MAXM 1000005
#define ll long long
using namespace std;
struct BigInt{int len;int s[SIZE];int p; //p==1 + p==-1 -BigInt(){p=1;len=0;memset(s,0,sizeof(s));}BigInt operator = (const char A[]){int L=strlen(A);len=L;if('-'==A[0]){p=-1; len--;}else{p=1;}memset(s,0,sizeof(s));for(int i=1;i<=len;i++){s[i]=A[L-i]-'0';}return *this;}BigInt operator = (const BigInt &A){len=A.len;p=A.p;memset(s,0,sizeof(s));for(int i=1;i<=len;i++){s[i]=A.s[i];}return *this;}BigInt operator *= (const int &A){for(int i=1;i<=len;i++){s[i]*=A;}for(int i=1;i<=len;i++){s[i+1]+=s[i]/10; //+= not +s[i]%=10;}int t=len;while(s[t+1]){t++;s[t+1]+=s[t]/10;s[t]%=10;}len=t;return *this;}// compare Absbool operator < (const BigInt &A){if(len!=A.len){return (len<A.len);}for(int i=len;i>=1;i--){if(s[i]!=A.s[i]){return (s[i]<A.s[i]);}}return 0;}BigInt operator -= (const BigInt &A){BigInt B,C;B=*this; C=*this;if(B<A){B.p=A.p;B=A;}else{B.p=p;C=A;}for(int i=1;i<=C.len;i++){B.s[i]-=C.s[i];}for(int i=1;i<=C.len;i++){if(B.s[i]<0){B.s[i]+=10;B.s[i+1]-=1;}}int t=C.len;while(B.s[t+1]<0){t++;B.s[t]+=10;B.s[t+1]-=1;}for(int i=B.len;i>=1;i--){if(!B.s[i]){B.len--;}else{break;}}if(!B.len) B.len=1;return (*this=B);}BigInt operator += (const BigInt &A){if(p*A.p<0){return (*this-=A);}len=max(len,A.len);for(int i=1;i<=len;i++){s[i]+=A.s[i];}for(int i=1;i<=len;i++){s[i+1]+=s[i]/10;s[i]%=10;}if(s[len+1]){len++;s[len+1]=s[len]/10;s[len]%=10;}return *this;}int operator % (const int &A){int q=0;for(int i=len;i>=1;i--){q=q*10+s[i];q=q%A;}return q*p;}void Print(){if(p<0) printf("-");for(int i=len;i>=1;i--){printf("%d",s[i]);}printf("\n");}
};
BigInt a[MAXN];
int prime[6]={0,1000193,1000367,1000427,1000453};
int n,m;
int b[MAXM];
int B[MAXN];
vector<int> ans,bans;
void read(int k){char s[SIZE]={0};int len=0;char c=getchar();do{s[len++]=c;c=getchar();}while('0'<=c&&c<='9');a[k]=s;
}
bool check(int k){BigInt sum;for(int i=n;i>=0;i--){sum*=k;sum+=a[i];}if(1==sum.len&&!sum.s[1]){return 1;}return 0;
}
int main()
{
//  freopen("T1.in","r",stdin);
//  freopen("my.out","w",stdout);scanf("%d%d",&n,&m);getchar();for(int i=0;i<=n;i++){read(i);}for(int k=1;k<=4;k++){for(int i=0;i<=n;i++){B[i]=a[i]%prime[k];}for(int x=1;x<=m;x++){ll sum=0;for(int i=n;i>=0;i--){sum=((sum*x)+B[i])%(ll)prime[k];}if(sum){b[x]=-1;}else if(b[x]!=-1){b[x]=1;}}}for(int i=1;i<=m;i++){if(1==b[i]){bans.push_back(i);}}for(int i=0;i<bans.size();i++){if(check(bans[i])){ans.push_back(bans[i]);}}printf("%d\n",ans.size());for(int i=0;i<ans.size();i++){printf("%d\n",ans[i]);}return 0;
}

这题AC解法是利用类似线性筛数的思想,
如果f(x)!=0那么f(x+kMOD)!=0(这个和我的想法是一致的)
关键就在于,我们可以利用这条性质,只处理0~MOD-1的部分
然后对于x,直接对MOD取模,然后就很大程度上减少了计算量

#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<vector>
#define MAXN 105
#define SIZE 10025
#define MAXM 1000005
#define ll long long
using namespace std;
const int prime[]={10007,10917,30071};
int n,m;
int a[MAXN][4];
bool f[MAXM][4];
char s[SIZE];
vector<int> ans;
bool calc(int x,int j){ll sum=0;for(int i=n;i>=0;i--){sum=(sum*x+a[i][j])%prime[j];}return (0==sum);
}
int main()
{
//  freopen("T1.in","r",stdin);
//  freopen("my.out","w",stdout);scanf("%d%d",&n,&m);for(int i=0;i<=n;i++){memset(s,0,sizeof(s));scanf("%s",s);int len=strlen(s),be=0;int p=1;if('-'==s[0]){p=-1;be++;}for(int j=0;j<3;j++){ll temp=0;for(int k=be;k<len;k++){temp=((temp*10)+s[k]-'0')%prime[j];}a[i][j]=temp*p;if(a[i][j]<0) a[i][j]+=prime[j];           }}for(int j=0;j<3;j++){for(int i=0;i<prime[j];i++){f[i][j]=calc(i,j);}}for(int i=1;i<=m;i++){int ok=1;for(int j=0;j<3;j++){if(!f[i%prime[j]][j]){ok=0;break;}}if(ok){ans.push_back(i);}}printf("%d\n",ans.size());for(int i=0;i<ans.size();i++){printf("%d\n",ans[i]);}return 0;
}

刷题记录-P2312 解方程相关推荐

  1. 攻防世界misc高手进阶区刷题记录

    攻防世界misc高手进阶区刷题记录 easycap 解压出来之后为一个pcap文件,使用wireshark打开 右键追踪TCP数据流即可获得flag flag:385b87afc8671dee0755 ...

  2. codevs3732==洛谷 解方程P2312 解方程

    P2312 解方程 195通过 1.6K提交 题目提供者该用户不存在 标签数论(数学相关)高精2014NOIp提高组 难度提高+/省选- 提交该题 讨论 题解 记录 题目描述 已知多项式方程: a0+ ...

  3. BZOJ刷题记录---提高组难度

    BZOJ刷题记录---提高组难度 总目录详见https://blog.csdn.net/mrcrack/article/details/90228694 序号 题号 算法 思想难度 实现难度 总难度 ...

  4. 算法笔记CodeUp第一至第六章刷题记录

    文章目录 <算法笔记>2.2小节--C/C++快速入门->顺序结构 1.例题1-1-1 按要求输出信息(1) 2.例题1-1-2 按要求输出信息(2) 3.例题1-2-1 求两个整数 ...

  5. Pythontip刷题记录

    pythontip 刷题记录 11.给你一个正整数列表 L, 输出L内所有数字的乘积末尾0的个数.(提示:不要直接相乘,数字很多,相乘得到的结果可能会很大). 不能直接相乘会太大了,分解质因数,去找2 ...

  6. ACM比赛经验、刷题记录及模板库总结(更新中)

    前言 本文所提及的部分题目代码,可以在我的Github上找到 第一部分 经验分享及感受 第二部分 刷题记录 一.基础算法&程序语言 //strlen()函数的复杂度是O(n)要小心 //截取字 ...

  7. 重走长征路---OI每周刷题记录---11月4日 2013

    总目录详见https://blog.csdn.net/mrcrack/article/details/84471041 做题原则,找不到测评地址的题不做.2018-11-28 重走长征路---OI每周 ...

  8. LeetCode刷题记录7——824. Goat Latin(easy)

    LeetCode刷题记录7--824. Goat Latin(easy) 目录 LeetCode刷题记录7--824. Goat Latin(easy) 题目 语言 思路 后记 题目 题目需要将一个输 ...

  9. 洛谷P2312 解方程题解

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

最新文章

  1. Windows7 64bit VS2013 Caffe test MNIST操作步骤
  2. define宏定义中的#,##,@#及\符号
  3. oracle cast multiset table 语法演示
  4. docker配置容器运行jar包
  5. django 学习个人总结 之many_to_one
  6. 电脑蓝屏后你该做的几桩要事
  7. python为什么不能删除_为什么python不允许我删除文件?
  8. 防勒索病毒奇兵——MCK(云私钥)
  9. GCC中-O1 -O2 -O3 优化的原理是什么?
  10. Mysql报错:SQLIntegrityConstraintViolationException: Duplicate entry ‘xxx‘ for key ‘PRIMARY‘
  11. Nginx是什么,为什么使用Nginx
  12. 用Chrome浏览器模拟手机,andriord,iphone,ipad访问网站
  13. 微博指定日期舆情数据爬虫获取—基于中文金融词典(python)
  14. 单片机 I2C操作笔记——以 AT24C04为例
  15. 小伙教你用C++编写飞机大战,编程学习,有源代码哦
  16. jdk8版本以上的javafx安装操作,通过下载javafx安装包,内附jdk8的安装包
  17. 甲基化系列 3. 甲基化芯片数据分析完整版(ChAMP)
  18. Simultaneous Detection and Segmentation
  19. 基于YOLOV5动态检测19种类别
  20. 武汉大学转专业计算机,武汉大学的转专业须知

热门文章

  1. 【ZooKeeper】上班摸鱼时间——一文了解 ZAB 协议
  2. 杰里之DCDC 电感啸叫【篇】
  3. 从零开始学习Java设计模式 | 创建型模式篇:抽象工厂模式
  4. OLED显示温湿度(AHT20)及姓名学号
  5. 关于java语言中的package和import机制
  6. 新项目中需要学习的东西
  7. c语言字符画火箭,用C语言实现火箭的升空
  8. 通过检测png图片透明区实现不规则按钮
  9. 通过NLP技术寻找公司竞品(智能投研)
  10. 荣誉丨国辰机器人荣获维科杯•OFweek 2021中国机器人行业年度优秀应用案例奖