#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));
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());
//cout << endl;
}
vector<int> cur(n);
vector<int> have(m);
vector<int> top(m);
bool get = true;
int cnt = 0;
while(get){
get = false;
for(int j = 0;j < m;j++){
//cout << " ";
while(top[j] != n && req[j][top[j]].f <= have[j]){
//cout << reqque[j].front().f;
cur[req[j][top[j]].s]++;
top[j]++;
}
}
for(int j = 0;j < n;j++){
if(cur[j] == m){
cnt++;
cur[j] = -1;
for(int i = 0;i < m;i++){
have[i] += gain[j][i];
}
get = true;
}
}
//cout << endl;
//cout << 1;
}
cout << cnt;
}
| # | 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... |