记录编号 |
463723 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOIP 2014]解方程 |
最终得分 |
100 |
用户昵称 |
CSU_Turkey |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.608 s |
提交时间 |
2017-10-24 18:10:57 |
内存使用 |
1.27 MiB |
显示代码纯文本
#include<bits/stdc++.h>//好神奇!考场能拿50就上天了qwq
#define ll long long
using namespace std;
int n,m;
ll a[10][105],mod[10]={0,10007,13417,16231,19441,22159,27043};
void read(int x){
char ch=getchar();
int f=1;
while(!(ch<='9'&&ch>='0')){
if(ch=='-')f=-1;
ch=getchar();
}
while(ch<='9'&&ch>='0'){
for(int i=1;i<=6;i++){
a[i][x]=a[i][x]*10+ch-'0';
if(a[i][x]>=mod[i]){
a[i][x]%=mod[i];
}
}ch=getchar();
}
for(int i=1;i<=6;i++)a[i][x]*=f;
}
int ans;
bool book[1000006];
int check(ll x,int z){
ll ans=a[z][n];
for(int i=n-1;i>=1;i--){
ans=(ans*x%mod[z]+a[z][i])%mod[z];
}return ans;
}
int main()
{
freopen("equationa.in","r",stdin);
freopen("equationa.out","w",stdout);
scanf("%d%d",&n,&m);n++;
for(int i=1;i<=n;i++){
read(i);
}
for(ll i=1;i<=min(mod[1],(ll)m);i++){
if(!check(i,1)){
for(int j=i;j<=m;j+=mod[1])book[j]=1,ans++;
}
}
for(ll i=1;i<=m;i++){
if(!book[i])continue;
int bo=0;
for(int j=2;j<=6;j++){
if(check(i,j)){
bo=1;break;
}
}
if(bo)book[i]=0,ans--;
}
printf("%d\n",ans);
for(int i=1;i<=m;i++)if(book[i])printf("%d\n",i);
return 0;
}