#include <iostream>
#include <math.h>
#include <vector>
#include <string>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <cstring>
#include <iomanip>
#include <set>
#include <bitset>
using namespace std;
using ll = long long;
using pii = pair<int,int>;
using piii = tuple<int,int,int>;
using piiii = tuple<int,int,int,int>;
#define endl '\n'
#define f first
#define s second
#define int long long
signed main(){
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int n,m;cin >> n >> m;
vector<vector<pii>> req(m,vector<pii>(n));
vector<vector<int>> gain(n,vector<int>(m));
vector<queue<pii>> reqque(m);
for(int i = 0;i < n;i++){
for(int j = 0;j < m;j++){
int g;cin >> g;
req[j][i] = {g,i};
}
}
for(auto &i:gain){
for(auto &j:i){
cin >> j;
}
}
for(int i = 0;i < m;i++){
sort(req[i].begin(),req[i].end());
for(auto j:req[i]){
reqque[i].emplace(j);
//cout << j.f << "-" << j.s << " ";
}
//cout << endl;
}
vector<int> cur(n);
vector<int> have(m);
bool get = true;
int cnt = 0;
while(get){
cnt++;
get = false;
for(int j = 0;j < m;j++){
while(!reqque[j].empty() && reqque[j].front().f <= have[j]){
cur[reqque[j].front().s]++;
reqque[j].pop();
}
}
for(int j = 0;j < n;j++){
if(cur[j] == m){
cur[j] = -1;
for(int i = 0;i < m;i++){
have[i] += gain[j][i];
}
get = true;
}
}
//cout << 1;
}
cout << cnt-1;
}
| # | 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... |