[关闭]
@lychee123 2017-09-06T20:30:51.000000Z 字数 888 阅读 940

通过数据前几项找出递推关系(板子)

数论


  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define ld double
  4. const int SZ=1e5;
  5. int n;
  6. typedef vector<ld> vld;
  7. vld ps[2333];
  8. int pn=0,fail[SZ];
  9. ld x[SZ],delta[SZ];
  10. int main()
  11. {
  12. scanf("%d",&n);
  13. for(int i=1; i<=n; i++) scanf("%lf",x+i);
  14. for(int i=1; i<=n; i++)
  15. {
  16. ld dt=-x[i];
  17. for(int j=0; j<ps[pn].size(); j++)
  18. dt+=x[i-j-1]*ps[pn][j];
  19. delta[i]=dt;
  20. if(fabs(dt)<=1e-7) continue;
  21. fail[pn]=i;
  22. if(!pn)
  23. {
  24. ps[++pn].resize(1);
  25. continue;
  26. }
  27. vld&ls=ps[pn-1];
  28. ld k=-dt/delta[fail[pn-1]];
  29. vld cur;
  30. cur.resize(i-fail[pn-1]-1); //trailing 0
  31. cur.push_back(-k);
  32. for(int j=0; j<ls.size(); j++) cur.push_back(ls[j]*k);
  33. if(cur.size()<ps[pn].size()) cur.resize(ps[pn].size());
  34. for(int j=0; j<ps[pn].size(); j++) cur[j]+=ps[pn][j];
  35. ps[++pn]=cur;
  36. }
  37. for(unsigned g=0; g<ps[pn].size(); g++)
  38. printf("%f ",ps[pn][g]);
  39. return 0;
  40. }

用法举例

已知前项为
对于代码输入,然后输入这就个数
跑出来的结果为
表示当前项与前四项相关。
推出公式为

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注