1 条题解
-
0
解题思路
-
问题理解:
- 给定一个长度为 的整数序列 ,需要找到一个最低次数的多项式 满足 ()。
- 利用该多项式预测接下来的 个值 。
-
多项式性质分析:
- 任何有限序列都可以用多项式表示,关键在于找到最低次数的多项式。
- 多项式次数 可以通过差分法确定:计算序列的差分直到差分序列变为常数,此时差分次数即为 。
-
差分法应用:
- 一阶差分:
- 二阶差分:$ \Delta_{2} X_i = \Delta_{1}X_{i+1} - \Delta_{1} X_i $
- 重复计算直到 为常数序列,此时 为多项式次数。
代码实现
#include <iostream> using namespace std; typedef long long ll; const int maxx = 110; const int mod = 10007; const int inf = 0x3f3f3f3f; const double eps = 1e-5; int a[maxx][maxx]; int main() { ios::sync_with_stdio(false); cin.tie(0); int t; cin >> t; while (t--) { for (int i = 0; i < maxx; i++) { for (int j = 0; j < maxx; j++) { a[i][j] = 0; } } int s, c; cin >> s >> c; for (int i = 0; i < s; i++) cin >> a[0][i]; for (int i = 1; i < s; i++) for (int j = 0; j < s - i; j++) a[i][j] = a[i - 1][j + 1] - a[i - 1][j]; for (int i = 1; i <= c; i++) a[s - 1][i] = a[s - 1][0]; for (int i = s - 2; i >= 0; i--) for (int j = 0; j < c; j++) a[i][s - i + j] = a[i + 1][s - i + j - 1] + a[i][s - i + j - 1]; for (int i = 0; i < c - 1; i++) cout << a[0][s + i] << " "; cout << a[0][s + c - 1] << "\n"; } return 0; }
-
- 1
信息
- ID
- 399
- 时间
- 2000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 2
- 已通过
- 1
- 上传者