Codeforces 1185C2 Exam in BerSU (hard version)

mac2022-06-30  19

题目链接

题意:

有n个学生依次答题,每个学生都有自己的答题时长。答题总时间只有M分钟。问第 i 个学生要答题,则前面最少多少人不答题才行?

分析:

由题面我们可以知道t较小,因此无需使用主席树(而且主席树会TLE,/(ㄒoㄒ)/~~)。

代码:

#include <bits/stdc++.h> using namespace std; const int maxn = 2e5 + 9; int a[maxn], sum[maxn]; int in[101]; int main() { ios::sync_with_stdio(false); cin.tie(0); int n, m; cin >> n >> m; for (int i = 0; i < n; i++) { cin >> a[i]; } sum[0]=a[0]; for (int i = 1; i < n; i++) { sum[i] =a[i]+ sum[i - 1]; } in[a[0]]++; cout << 0 << ' '; for (int i = 1; i < n; ++i) { int zan = sum[i - 1], b = m - a[i]; if (zan <= b) { cout << 0 << ' '; } else { int ans = 0; for (int j = 100; j > 0; --j) { if (in[j]) { int sz = in[j]; int jian = sz * j; if (zan - b > jian) { ans += sz; zan -= jian; } else { ans += (zan - b) / j; if ((zan - b) % j) ++ans; break; } } } cout << ans << ' '; } in[a[i]]++; } return 0; }
最新回复(0)