#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define all(x) (x).begin(), (x).end()
#define int ll
const int maxn = 1e6 + 7;
int n, k, cnt[maxn], p[maxn], c[maxn];
vector<pair<int, int>> v[maxn];
void solve() {
cin >> n >> k;
int r[n + 1][k + 1], u[n + 1][k + 1];
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= k; j++) cin >> r[i][j];
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= k; j++) cin >> u[i][j];
}
for (int i = 1; i <= k; i++) {
for (int j = 1; j <= n; j++) v[i].emplace_back(r[j][i], j);
sort(all(v[i]));
}
set<pair<int, int>> s;
for (int i = 1; i <= n; i++)
s.insert({0, i});
int ans = 0;
while (!s.empty()) {
for (int i = 1; i <= k; i++) {
while (p[i] < n && v[i][p[i]].first <= c[i]) {
int x = v[i][p[i]].second;
s.erase({cnt[x], x});
cnt[x]++;
s.insert({cnt[x], x});
p[i]++;
}
}
if (s.rbegin()->first < k) break;
ans++;
int x = s.rbegin()->second;
for (int i = 1; i <= k; i++) {
c[i] += u[x][i];
}
s.erase({cnt[x], x});
}
cout << ans;
}
signed main() {
int test = 1;
// cin >> test;
while (test--) {
solve();
// cout << '\n';
}
return 0;
}
| # | 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... |