记录编号 |
316480 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOIP 2014]解方程 |
最终得分 |
100 |
用户昵称 |
安呐一条小咸鱼。 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.515 s |
提交时间 |
2016-10-06 20:23:15 |
内存使用 |
4.29 MiB |
显示代码纯文本
#include <cstdio>
#include <algorithm>
#include <queue>
#include <cstring>
#include <stack>
#include <iostream>
#include <cstdlib>
#include <cmath>
#define me( a , b ) memset( a , b , sizeof(a) )
#define rep( a , l , r ) for(int a = l ; a <= r ; ++ a )
#define res( a , r , l ) for(int a = r ; a >= l ; -- a )
using namespace std;
int prime[] = { 10007 , 10321 , 10357 , 10091 , 10111 };
int num[110][10] , len , flag , n ,m , cnt[1000100] ;
bool f[15000][10];
char ch[11000] ;
bool calc( int x ,int j )
{
int tmp = 0;
res( i , n , 0)
{
tmp = ( tmp * x % prime[j] + num[i][j] ) % prime[j] ;
}
if( !tmp )return 1 ;
return 0 ;
}
int main()
{
freopen("equationa.in", "r", stdin);
freopen("equationa.out", "w", stdout);
scanf( "%d%d" , &n , &m );
rep( i , 0 , n )
{
flag = 1 ;
scanf( "%s" , ch );
len = strlen(ch);
rep( l , 0 , len -1 )
{
if( ch[l] == '-' ) flag = -1 ;
else rep( j , 0 , 4 ) num[i][j] =( ch[l] - '0' + num[i][j] * 10 ) % prime[j] ;
}
if( flag == -1 ) rep( j , 0 , 4 ) num[i][j] = prime[j] - num[i][j] ;
}
rep( i , 0 , 4 )rep( j , 1 , prime[i] - 1 )f[j][i] = calc( j , i );
rep( i , 1 , m )
{
flag = 1;
rep( j , 0 , 4 )
{
if( ! f[ i % prime[j] ][j] )
{
flag = 0 ; break ;
}
}
if( flag )cnt[ ++ cnt[0] ] = i;
}
printf( "%d\n" ,cnt[0]);
rep( i, 1 , cnt[0] )
{
printf( "%d\n" , cnt[i] );
}
}