记录编号 |
316548 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOIP 2014]解方程 |
最终得分 |
100 |
用户昵称 |
森林 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.697 s |
提交时间 |
2016-10-06 21:12:27 |
内存使用 |
4.35 MiB |
显示代码纯文本
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<iomanip>
using namespace std;
const int prime[]={10007,10009,10037,10039,10061};
int a[5][110]={0},n,m;
int ans[1000010],tot=0,MOD;
char str[10100];
int solve[5][11061];
inline int f(const int &x,const int& k){
int v=a[k][n];
MOD=prime[k];
for(int i=n-1;i>=0;--i)v=(v*x%MOD+a[k][i])%MOD;
return v;
}
int main(){
#define submit
#ifdef submit
freopen("equationa.in","r",stdin);
freopen("equationa.out","w",stdout);
#endif
int len;
bool flag;
scanf("%d%d",&n,&m);
for(int i=0;i<=n;i++){
flag=0;
scanf("%s",str);
len=strlen(str);
if(str[0]=='-')flag=1;
for(int k=0;k<5;k++){
MOD=prime[k];
for(int j=0+flag;j<len;++j)a[k][i]=(a[k][i]*10%MOD+str[j]-'0')%MOD;
if(flag)a[k][i]=-a[k][i];
}
}
for(int k=0;k<5;k++){
len=min(m+1,prime[k]);
for(int i=1;i<len;i++)solve[k][i]=f(i,k);
}
for(int i=1;i<=m;i++){
flag=1;
for(int k=0;k<5;k++){
if(solve[k][i%prime[k]]){
flag=0;
break;
}
}
if(flag)ans[++tot]=i;
}
printf("%d\n",tot);
for(int i=1;i<=tot;i++)printf("%d\n",ans[i]);
#ifndef submit
system("pause");
#else
fclose(stdin);
fclose(stdout);
#endif
return 0;
}