#include <bits/stdc++.h>
#define int long long
using namespace std;
int cnt[1000001];
vector<pair<int, int>> luu[1000001];
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
int n, k;
cin >> n >> k;
vector<vector<int>> r(n+1, vector<int>(k+1)), u(n+1, vector<int>(k+1));
for (int i = 1;i<=n;++i){
for (int j = 1;j<=k;++j){
cin >> r[i][j];
if(r[i][j]==0)cnt[i]++;
else luu[j].push_back({r[i][j], i});
}
}
for (int i = 1;i<=k;++i){
sort(luu[i].begin(), luu[i].end(), [](pair<int, int> p, pair<int, int> q){
return p>q;
});
}
for (int i = 1;i<=n;++i){
for (int j = 1;j<=k;++j){
cin >> u[i][j];
}
}
using state = pair<int, int>;
priority_queue<state> pq;
for (int i = 1;i<=n;++i){
pq.push({cnt[i], i});
// cout << cnt[i] << ' ' << i << '\n';
}
// cout << '\n';
vector<int> p(k+1, 0);
int res = 0;
while(!pq.empty()){
auto [d, i] = pq.top();
pq.pop();
if(d!=cnt[i])continue;
// cout << d << ' ' << i << '\n';
if(d!=k){
cout <<res;
return 0;
}else{
for (int j = 1;j<=k;++j){
p[j] += u[i][j];
while(!luu[j].empty()){
auto [x, y] = luu[j].back();
if(p[j] >= x){
cnt[y]++;
pq.push({cnt[y], y});
luu[j].pop_back();
}else break;
}
}
res++;
}
}
cout << res;
}
| # | 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... |