Submission #1315399

#TimeUsernameProblemLanguageResultExecution timeMemory
1315399hyyhTopical (NOI23_topical)C++20
100 / 100
321 ms78672 KiB
#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);
    queue<int> add;
    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;
                if(++cur[req[j][top[j]].s] == m){
                    add.push(req[j][top[j]].s);
                }
                top[j]++;
            }
        }
        while(!add.empty()){
            int j = add.front();add.pop();
            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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...