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