// noi 2023 final round
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define vi vector<long long>
#define all(x) x.begin(), x.end()
#define endl "\n"
#define pr pair<ll, ll>
#define ff first
#define ss second
void solution();
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
solution();
return 0;
}
void solution() {
ll n, k; cin >> n >> k;
vi cnt(n);
vector<vector<pr>> a(k);
vector<vi> b(n, vi(k));
for (int i = 0; i < n; i++) {
for (int j = 0; j < k; j++) {
ll x; cin >> x;
a[j].push_back({x, i});
}
}
for (int i = 0; i < k; i++) {
sort(all(a[i]), greater<pr>());
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < k; j++) {
cin >> b[i][j];
}
}
set<ll> avl;
vi curr(k);
for (int i = 0; i < k; i++) {
while (a[i].size() > 0 && a[i].back().ff <= curr[i]) {
cnt[a[i].back().ss]++;
if (cnt[a[i].back().ss] == k) avl.insert(a[i].back().ss);
a[i].pop_back();
}
}
ll ans = 0;
while (avl.size() > 0) {
ans++;
ll i = *avl.begin();
avl.erase(avl.begin());
for (int j = 0; j < k; j++) {
curr[j] += b[i][j];
}
for (int j = 0; j < k; j++) {
while (a[j].size() > 0 && a[j].back().ff <= curr[j]) {
cnt[a[j].back().ss]++;
if (cnt[a[j].back().ss] == k) avl.insert(a[j].back().ss);
a[j].pop_back();
}
}
}
cout << ans << endl;
}
| # | 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... |