比赛 |
防止浮躁的小练习v0.6 |
评测结果 |
AAAAAAAAAA |
题目名称 |
解方程 |
最终得分 |
100 |
用户昵称 |
cdcq |
运行时间 |
0.947 s |
代码语言 |
C++ |
内存使用 |
9.76 MiB |
提交时间 |
2016-10-20 16:47:33 |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int n,m; int a[1100][10];
bool can[1100000][6];
int mo[6]={0,11261,19997,22877,21893,14843};
int dui[1100000],tou=0;
bool check(int x,int y){
int z=0;
for(int i=n;i>=1;i--)
z=((z+a[i][y])*x)%mo[y];
return ((z+a[0][y])%mo[y]) ? true : false;//因为memset的问题,所以这里#define false true
}
int main(){
//freopen("ddd.in","r",stdin);
freopen("equationa.in","r",stdin);
freopen("equationa.out","w",stdout);
memset(can,0,sizeof(can));
memset(a,0,sizeof(a));
cin>>n>>m;
for(int i=0;i<=n;i++){
int mark=1; char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')mark=-1; ch=getchar();}
while(ch>='0'&&ch<='9'){
for(int j=1;j<=5;j++)
a[i][j]=((a[i][j]<<3)+(a[i][j]<<1)+ch-'0')%mo[j];//边读边膜,而且要膜在check的时候膜的内个数
ch=getchar();
}
for(int j=1;j<=5;j++)
a[i][j]*=mark;
}
for(int j=1;j<=5;j++)
for(int i=1;i<=mo[j]&&i<=m;i++)//如果这个数膜膜的数合法,呢么它加上它膜的内个数也是合法的
can[i][j]=can[i][j] | check(i,j);
int i=1;
for(;i<=m;i++){
bool _can=false;
for(int j=1;j<=5;j++){
int temp=i%mo[j];
_can=_can | can[temp][j];
}
if(!_can) dui[++tou]=i;
}
cout<<tou<<endl;
for(int i=1;i<=tou;i++)
printf("%d\n",dui[i]);
return 0;
}