记录编号 463686 评测结果 AAAAAAAAAA
题目名称 [NOIP 2014]解方程 最终得分 100
用户昵称 GravatarHZOI_蒟蒻一只 是否通过 通过
代码语言 C++ 运行时间 2.052 s
提交时间 2017-10-24 17:07:54 内存使用 3.12 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int maxm=(int)1e6+5,maxl=10005,maxn=105;
const int mod[]={2147483647,999946333};
int n,m,a[maxn][maxl],anssum,isfu[maxn];unsigned long long amod[maxn];bool notans[maxm];
char s[maxm];
unsigned long long check(unsigned long long val)
{
	unsigned long long y=0;
	for(int i=n;~i;i--)
	{
		y=y*val+amod[i];
		y=(y&0x7fffffff)+(y>>31);
	}
	y%=0x7fffffff;
	return y;
}
bool check(int val,int module)
{
	val%=module;unsigned long long y=0;
	for(int i=n;~i;i--)
	{
		y=y*val+amod[i];
		y%=module;
	}
	y%=module;return y;
}
int haha()
{
	freopen("equationa.in","r",stdin);
	freopen("equationa.out","w",stdout);
	scanf("%d%d",&n,&m);anssum=m;
	for(int i=0;i<=n;i++)
	{
		scanf("%s",s+1);int len=strlen(s+1);
		for(int j=1;j<=len;j++)
		{
			if(s[j]=='-'){isfu[i]=1;continue;}
			if(s[j]>='0'&&s[j]<='9')a[i][++a[i][0]]=s[j]-'0';
		}
	}
	for(int i=0;i<=n;i++)
	{
		amod[i]=0;
		for(int j=1;j<=a[i][0];j++)
		{
			amod[i]=amod[i]*10+a[i][j];
			amod[i]%=0x7fffffff;
		}
		amod[i]=amod[i]%0x7fffffff;
		if(isfu[i]&&amod[i])amod[i]=0x7fffffff-amod[i];
	}
	for(int i=1;i<=m;i++)
		if(check(i))anssum--,notans[i]=1;
	for(int t=1;t<2;t++)
	{
		for(int i=0;i<=n;i++)
		{
			amod[i]=0;
			for(int j=1;j<=a[i][0];j++)
			{
				amod[i]=amod[i]*10+a[i][j];
				amod[i]%=mod[t];
			}
			amod[i]%=mod[t];
			if(isfu[i]&&amod[i])amod[i]=mod[t]-amod[i];
		}
		for(int i=1;i<=m;i++)
		{
			if(notans[i])continue;
			if(notans[i%mod[t]]){anssum--,notans[i]=1;continue;}
			if(check(i,mod[t]))anssum--,notans[i]=1;
		}
	}
	printf("%d\n",anssum);
	for(int i=1;i<=m;i++)
		if(!notans[i])printf("%d\n",i);
}
int sb=haha();
int main(){;}