记录编号 301388 评测结果 AAAAAAAAAA
题目名称 [NOIP 2014]解方程 最终得分 100
用户昵称 Gravatarconfoo 是否通过 通过
代码语言 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]);
}