记录编号 346272 评测结果 AAAAAAAAAA
题目名称 [NOIP 2014]解方程 最终得分 100
用户昵称 GravatarGo灬Fire 是否通过 通过
代码语言 C++ 运行时间 2.610 s
提交时间 2016-11-12 07:23:37 内存使用 38.05 MiB
显示代码纯文本
  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<cstring>
  4. #include<ctime>
  5. #include<iostream>
  6. #include<cmath>
  7. using namespace std;
  8. #define LL long long
  9. #define Inf 1e9+7
  10. const int maxn=1000000+10;
  11. const int Mod[20]={0,12341,18951,14441,12345,13331,16367};
  12. int n,m,ans[maxn],a[8][maxn];
  13. void Init();
  14. int MOD(char s[],int mod){
  15. int len=strlen(s);
  16. int x=0;
  17. if(s[0]=='-'){
  18. for(int i=1;i<len;i++)x=x*10+s[i]-48,x%=mod;
  19. return -1*x;
  20. }
  21. else {
  22. for(int i=0;i<len;i++)x=x*10+s[i]-48,x%=mod;
  23. return x;
  24. }
  25. }
  26. bool Judge(int x,int y){
  27. int date=a[x][n];//秦九韶判断是否最后值为0,取模运算只对除法无效
  28. for(int i=n;i>=1;i--){
  29. date=((date*y)%Mod[x]+a[x][i-1])%Mod[x];
  30. }
  31. return date==0 ? true : false;
  32. }
  33. bool flag[8][maxn];
  34. void Get(){
  35. for(int i=1;i<=6;i++)
  36. for(int j=1;j<=Mod[i];j++)
  37. flag[i][j]=Judge(i,j);
  38. }
  39. int main(){
  40. freopen("equationa.in","r",stdin);
  41. freopen("equationa.out","w",stdout);
  42. Init();
  43. //printf("Timeused=%.3lf",(double)clock()/CLOCKS_PER_SEC);
  44. //for(;;);
  45. getchar();getchar();
  46. return 0;
  47. }
  48. void Init(){
  49. scanf("%d%d",&n,&m);
  50. for(int i=0;i<=n;i++){
  51. char s[maxn];scanf("%s",s);
  52. for(int j=1;j<=6;j++){
  53. a[j][i]=MOD(s,Mod[j]);
  54. }
  55. }
  56. Get();
  57. int num=0;
  58. for(int i=1;i<=m;i++){
  59. bool ok=0;
  60. for(int j=1;j<=6;j++){
  61. if(!flag[j][i%Mod[j]]){ok=1;break;}
  62. }
  63. if(!ok)ans[++num]=i;
  64. }
  65. printf("%d\n",num);
  66. for(int i=1;i<=num;i++)printf("%d\n",ans[i]);
  67. }
  68. /*
  69. 2 10
  70. 1 -2 1
  71. ans 1 1
  72. */
  73. /*
  74. 2 10
  75. 2 -3 1
  76. ans 2 1 2
  77. */
  78. /*
  79. 2 10
  80. 1 3 2
  81. ans 0
  82. */