记录编号 194509 评测结果 AAAAAAAAAA
题目名称 [NOIP 2014]解方程 最终得分 100
用户昵称 Gravatar/k 是否通过 通过
代码语言 C++ 运行时间 1.997 s
提交时间 2015-10-16 18:39:57 内存使用 5.00 MiB
显示代码纯文本
#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
using namespace std;
char s[110][10010];
int p[20]={0,11261,19997,22877,21893,14843};
long long a[110];
int b[1000010];
int q[100000],w;
int n,m;
inline bool gyz(int r,int e)
{
	long long s=0;
	for(int i=n;i>=0;i--)
	{
		s+=a[i];
		s%=p[e];
		s*=r;
		s%=p[e];
	}
	if(s==0)
	    return 1;
	return 0;
}
inline void gmain(int e)
{
	for(int y=0;y<=n;y++)
	{
		int w=1,l=strlen(s[y]);
		long long h=0;
		for(int k=0;k<l;k++)
		{
			if(s[y][k]=='-')
			{
				w=-1;
				continue;
			}
			h*=10;
			h+=s[y][k]-'0';
			h%=p[e];
		}
		a[y]=h*w;
	}
	    for(int i=1;i<=p[e];i++)
	        //if(b[i]==e-1)
	            if(gyz(i,e))
	            {
					for(int k=i;k<=m;k+=p[e])
					    if(b[k]<e)
					    b[k]++;
	            }
}
int main()
{
	freopen("equationa.in","r",stdin);
	freopen("equationa.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(int i=0;i<=n;i++)
	    scanf("%s",s[i]);
	for(int i=1;i<=5;i++)
	    gmain(i);
	for(int i=1;i<=m;i++)
	    if(b[i]==5)
	        q[++w]=i;
	printf("%d\n",w);
	for(int i=1;i<=w;i++)
	    printf("%d\n",q[i]);
	/*getchar();
	getchar();*/
}