比赛 防止浮躁的小练习v0.6 评测结果 AAAAAAAAAA
题目名称 解方程 最终得分 100
用户昵称 cdcq 运行时间 0.947 s
代码语言 C++ 内存使用 9.76 MiB
提交时间 2016-10-20 16:47:33
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int n,m;  int a[1100][10];
bool can[1100000][6];
int mo[6]={0,11261,19997,22877,21893,14843};
int dui[1100000],tou=0;
bool check(int x,int y){
	int z=0;
	for(int i=n;i>=1;i--)
		z=((z+a[i][y])*x)%mo[y];
	return ((z+a[0][y])%mo[y]) ? true : false;//因为memset的问题,所以这里#define false true
}
int main(){
	//freopen("ddd.in","r",stdin);
	freopen("equationa.in","r",stdin);
	freopen("equationa.out","w",stdout);
	memset(can,0,sizeof(can));
	memset(a,0,sizeof(a));
	cin>>n>>m;
	for(int i=0;i<=n;i++){
		int mark=1;  char ch=getchar();
		while(ch<'0'||ch>'9'){if(ch=='-')mark=-1;  ch=getchar();}
		while(ch>='0'&&ch<='9'){
			for(int j=1;j<=5;j++)
				a[i][j]=((a[i][j]<<3)+(a[i][j]<<1)+ch-'0')%mo[j];//边读边膜,而且要膜在check的时候膜的内个数
			ch=getchar();
		}
		for(int j=1;j<=5;j++)
			a[i][j]*=mark;
	}
	for(int j=1;j<=5;j++)
		for(int i=1;i<=mo[j]&&i<=m;i++)//如果这个数膜膜的数合法,呢么它加上它膜的内个数也是合法的
			can[i][j]=can[i][j] | check(i,j);
	int i=1;
	for(;i<=m;i++){
		bool _can=false;
		for(int j=1;j<=5;j++){
			int temp=i%mo[j];
			_can=_can | can[temp][j];
		}
		if(!_can)  dui[++tou]=i;
	}
	cout<<tou<<endl;
	for(int i=1;i<=tou;i++)
		printf("%d\n",dui[i]);
	return 0;
}