求大佬找错qaq(O(nv)的方法)
  • 板块P4933 大师
  • 楼主GoldenFishX
  • 当前回复5
  • 已保存回复5
  • 发布时间2020/7/27 10:47
  • 上次更新2023/11/6 22:08:26
查看原帖
求大佬找错qaq(O(nv)的方法)
156353
GoldenFishX楼主2020/7/27 10:47
// f[i]表示以第i个电塔结尾公差为d的等差数列的个数
// f[i] = g[h[i]-d];
// g[h[i]] = (f[i] + g[h[i]]) %  MOD;
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1000 + 5;
const int MAXV = 20000;
const long long MOD = 998244353;
int h[MAXN];
int f[MAXV * 2], g[MAXV * 2];
int main() {
  int n, ans = 0;
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> h[i];
  }
  for (int i = -MAXV; i <= MAXV; i++) {
    g[i + MAXV] = 1;
  }
  for (int d = -MAXV; d <= MAXV; d++) {  //枚举公差d
    for (int i = 1; i <= n; i++) {
      f[i + MAXV] = g[h[i] - d + MAXV];
      g[h[i] + MAXV] = (f[i + MAXV] + g[h[i] + MAXV]) % MOD;
    }
  }
  for (int i = -MAXV; i <= MAXV; i++) {
    ans = (f[i + MAXV] + ans) % MOD;
  }
  cout << ans;
  return 0;
}

样例都没过,wtcl/kk

2020/7/27 10:47
加载中...