记录编号 |
301388 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOIP 2014]解方程 |
最终得分 |
100 |
用户昵称 |
confoo |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
2.934 s |
提交时间 |
2016-08-31 17:41:13 |
内存使用 |
24.25 MiB |
显示代码纯文本
#include<cstdio>
#include<cctype>
#include<vector>
#define file(x) "equationa."#x
using std::vector;
typedef long long ll;
const int MAXN=101;
//const ll M[5]={1000159,2000003,3000017,4000067,5000087};
const ll M[5]={11261,19997,22877,21893,14843};
int n,m;
ll a[MAXN][5];
bool cor[5000090][5];
char ch;
vector<int> v;
ll sol(int t,int k){
ll ret=0;
for(int i=n;i>=0;i--)
ret=(ret*t%M[k]+a[i][k])%M[k];
return ret;
}
char buf[100010];
int main(){
freopen(file(in),"r",stdin);
freopen(file(out),"w",stdout);
scanf("%d%d",&n,&m);
for(int i=0;i<=n;i++) {
scanf("%s",buf);
int pos=0;
char ch=buf[pos];
bool f=0;
if(ch=='-') f=1,pos++;
ch=buf[pos];
for(int j=0;j<5;j++) a[i][j]=ch-'0';
while(ch=buf[++pos])
for(int j=0;j<5;j++) a[i][j]=(a[i][j]*10+ch-'0')%M[j];
for(int j=0;j<5;j++) if(f) a[i][j]*=M[j]-1,a[i][j]%=M[j];
}
/*for(int i=1;i<=m;i++){
bool f=1;
for(int k=0;k<5;k++) if(sol(i,k)) {f=0;break;}
if(f) ans++,v.push_back(i);
} */
for(int k=0;k<5;k++){
for(int j=1;j<=M[k];j++)
cor[j][k]=sol(j,k);
}
for(int i=1;i<=m;i++) {
bool f=1;
for(int j=0;j<5;j++) if(cor[i%M[j]][j]) {f=0;break;}
if(f) v.push_back(i);
}
printf("%d\n",(int)v.size());
for(int i=0;i<v.size();i++) printf("%d\n",v[i]);
}