题解:P14765 [ICPC 2024 Seoul R] Bottles
Python_enjoy · · 题解
这道题需要用到前缀和与差分。
我们先用前缀和数组
那么我们可以怎么实现维护人数变化的功能呢?没错,差分。那么我们如何更加高效地利用空间呢?没错,map。
下面是我的代码实现:
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e2;
const int M = 3e2;
int a[N + 5][M + 5], t[N + 5][M + 5], n, m;
signed main() {
cin >> n >> m;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cin >> a[i][j];
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
t[i][j + 1] = t[i][j] + a[i][j];
}
}
for (int i = 1; i <= m; i++) {
map<int, int> d;
for (int j = 1; j <= n; j++) {
d[t[j][i]]++;
d[t[j][i + 1]]--;
}
int peo = 0, ans = 0;
for (auto j : d) {
peo += j.second;
ans = max(ans, peo);
}
cout << ans << " ";
}
return 0;
}