解方程
嗨呀昨天忘了更了。。
这题有毒。。不改读优过不了的。。
原题链接:https://www.luogu.org/problem/show?pid=2312#sub
思路是套秦九韶公式。其实很简单,枚举答案带入计算就好。如果发现带入这个值算出来每一项都是0那这就是一个解。
我们用ans存储解的个数,用solvenum数组记录某个具体的解。
坑点在于记得取模,计算时要取模,读入的时候也要取。。。。。。
被这里坑惨了,一直都是30分。。。
参考代码:
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cctype> 5 #define mo 19260817 6 #define maxn 105 7 #define maxm 1000005 8 using namespace std; 9 bool flag = true; 10 int n,m,ans,cnt; 11 int sum = 0; 12 int a[maxn]; 13 int solvenum[maxm]; 14 inline int read(){ 15 int num = 0; 16 char c; 17 bool flag = false; 18 while ((c = getchar()) == ' ' || c == '\n' || c == '\r'); 19 if (c == '-') 20 flag = true; 21 else 22 num = c - '0'; 23 while (isdigit(c = getchar())) 24 num = ( (num*10) + c - '0' ) % mo; // 有毒 。。。。。 25 return (flag ? -1 : 1) * num; 26 } 27 28 bool qjs_calc(long long int x){ 29 sum = 0; 30 for (long long int i=n;i>=0;i--) 31 sum = ((a[i] + sum) * x) % mo; 32 if (sum == 0) 33 return true; 34 else 35 return false; 36 } 37 int main(){ 38 n = read();m = read(); 39 for (long long int i=0;i<=n;i++) 40 a[i] = read(); 41 for (long long int i=1;i<=m;i++){ 42 if (qjs_calc(i)){ 43 ans++; 44 solvenum[++cnt] = i; 45 } 46 } 47 printf("%d\n",ans); 48 for (long long int i=1;i<=cnt;i++){ 49 printf("%d\n",solvenum[i]); 50 } 51 return 0; 52 }
一切无法杀死我的,都将使我变得更加强大。