社区讨论

有人能给这个代码一个hack吗

P9400「DBOI」Round 1 三班不一般参与者 1已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mhz4brq3
此快照首次捕获于
2025/11/15 01:14
4 个月前
此快照最后确认于
2025/11/16 13:50
4 个月前
查看原帖
CPP
#include <bits/stdc++.h>

#define rep(i, l, r) for (int i = (l); i <= (int)(r); i++)
#define per(i, l, r) for (int i = (r); i >= (int)(l); i--)
#define Debug(...) fprintf(stderr, __VA_ARGS__)
#define max(a, b)  (!((a) < (b)) ? (a) : (b))
#define min(a, b)  ((a) < (b) ? (a) : (b))
using namespace std;
using i64 = long long;
#define int i64
const int maxn = 1000050, mod = 998244353, B = 700;
int l[maxn], r[maxn], a, b, n, dp[maxn];
int R(int l, int r, int b) {
  if (r < b) {
    return r - l + 1;
  } else if (l <= b && b <= r) {
    return b - l;
  } else {
    return 0;
  }
}
int calc(int L, int R) {
  int ans = 1;
  rep(i, L, R) {
    if (b <= l[i]) {
      ans = ans * (r[i] - l[i] + 1) % mod;
    } else {
      ans = ans * max(0, r[i] - b + 1) % mod;
    }
  }
  return ans;
}
signed main() {
  cin.tie(nullptr)->sync_with_stdio(false);

  cin >> n >> a >> b;
  b++;
  rep(i, 1, n) {
    cin >> l[i] >> r[i];
  }
  dp[0] = 1;
  rep(i, 1, n) {
    dp[i] = dp[i - 1] * (r[i] - l[i] + 1) % mod;
    if (i - a - 1 >= 0) {
      dp[i] = (dp[i] - dp[i - a - 1] * calc(i - a + 1, i) * R(l[i - a], r[i - a], b) % mod + mod) % mod;
    } if (i == a) {
      dp[i] = (dp[i] - calc(1, i) + mod) % mod;
    }
    dp[i] %= mod;
  }
  cout << dp[n] << "\n";
  return 0;
}
现在是sub3不过,对拍了结果好像没有拍出来

回复

1 条回复,欢迎继续交流。

正在加载回复...