#include <iostream>
#include <vector>
#include <iomanip>
#include <map>
#include <set>
#include <numeric>
#include <queue>
#include <deque>
#include <algorithm>
#include <stack>
#include <unordered_map>
using namespace std;
using ll = long long;
int main() {
int N, K;cin >> N >> K;
vector<vector<ll>> A(N, vector<ll>(K, 0));
auto B = A;
vector<vector<pair<ll, int>>> ST(K);
for (int i = 0;i < N;i++) {
for (int j = 0;j < K;j++) {
cin >> A[i][j];
ST[j].push_back({A[i][j], i});
}
}
for (int i = 0;i < N;i++) for (int j = 0;j < K;j++) cin >> B[i][j];
for (int i = 0;i < K;i++) sort(ST[i].begin(), ST[i].end());
vector<int> IT(K, 0);
vector<ll> now(K, 0);
vector<int> seen(N, 0);
int res = 0;
int times = 0;
while (true) {
queue<int> nxt;
for (int i = 0;i < K;i++) {
int it = IT[i];
while (it < N && ST[i][it].first <= now[i]) {
times++;
int id = ST[i][it].second;
seen[id]++;
if (seen[id] == K) nxt.push(id);
it++;
}
IT[i] = it;
}
if (nxt.empty()) break;
while (!nxt.empty()) {
int id = nxt.front();
nxt.pop();
for (int j = 0;j < K;j++) now[j] += B[id][j];
res++;
}
}
cout << res << 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... |