# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1268349 | shirokito | Topical (NOI23_topical) | C++20 | 338 ms | 80188 KiB |
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
void solve() {
int n, k; cin >> n >> k;
vector<ll> cnt_ok(n + 1), cur(k + 1);
vector<vector<pair<ll, ll>>> a(k + 1);
vector<vector<ll>> b(n + 1, vector<ll> (k + 1, 0));
queue<int> q;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= k; j++) {
int x; cin >> x;
if (x == 0) cnt_ok[i]++;
else a[j].push_back({x, i});
}
if (cnt_ok[i] == k) {
q.push(i);
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= k; j++) {
cin >> b[i][j];
}
}
for (int i = 1; i <= k; i++) {
sort(a[i].begin(), a[i].end(), greater<>());
}
int res = 0;
while (q.size()) {
int x = q.front(); q.pop();
res++;
for (int j = 1; j <= k; j++) {
cur[j] += b[x][j];
}
for (int j = 1; j <= k; j++) {
while (a[j].size() && a[j].back().first <= cur[j]) {
int p = a[j].back().second;
a[j].pop_back();
cnt_ok[p]++;
if (cnt_ok[p] == k) {
q.push(p);
}
}
}
}
cout << res << '\n';
}
int main() {
cin.tie(0) -> sync_with_stdio(0);
#define task "topic"
if (fopen(task".inp", "r")) {
freopen(task".inp", "r", stdin);
freopen(task".out", "w", stdout);
}
int T = 1; // cin >> T;
while (T--) {
solve();
}
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |