记录编号 354125 评测结果 AAAAAWWWWW
题目名称 [NOIP 2014]解方程 最终得分 50
用户昵称 Gravatarkilometer 是否通过 未通过
代码语言 C++ 运行时间 0.302 s
提交时间 2016-11-19 21:44:54 内存使用 7.92 MiB
显示代码纯文本
#include <stdio.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

int list[1000010]/*jie*/,a[110][10]/*hash*/;
int top,m,n;
int ok[1000010];/*panduan shibushijie*/
int hash[11]= {0,1007,10007,12347,12349,100017,111647,19720309,19750921,19981117,20150209};

int check1(int x/*gen*/,int k)/*k change hash*/
{
	int i,sum=0;
	for(i=n;i>=0;i--)
		sum=(sum*x+a[i][k])%hash[k];/*qin 9 shao*/
	if(sum!=0)
	{
		i=x;
		while(i<=m)
		{
			ok[i]=1;
			i=i+hash[k];
		}
		return 0;
	}
	else return 1;
}

int check(int x)
{
	int k;
	if(ok[x])
		return 0;
	else
		for(k=1;k<=10;k++)
		{
			if(!check1(x,k))
				return 0;
		}
		return 1;
}

int main()
{
freopen("equationa.in","r",stdin);
	freopen("equationa.out","w",stdout);
	int i,b,k,v,j;
	char c[10010];
	scanf("%d %d",&n,&m);
	memset(a,0,sizeof(a));
	memset(ok,0,sizeof(ok));
	for(i=0;i<=n;i++)
	{
		scanf("%s",&c);
		if(c[0]=='-')
		{
			b=1;/*biaoji fushu*/
		}
		else b=0;
		if(b==1)
			k=1;
		else
			k=0;
		while(c[k]>='0'&&c[k]<='9')
		{
			v=c[k]-'0';
			for(j=1;j<=10;j++)
			{
				a[i][j]=(a[i][j]*10+v)%hash[j];/*除法散列法*/
			}
			k++;
		}
		if(b)
		{
			for(j=1;j<=10;j++)
				if(a[i][j]!=0)
					a[i][j]=hash[j]-a[i][j];
		}
	}
	for(i=1;i<=m;i++)
	{
		if(check(i))
		{
			top++;
			list[top]=i;
		}
	}
	printf("%d",top);
	for(i=1;i<=top;i++)
		printf("%d",list[i]);
	return 0;
	
}