제출 #1364612

#제출 시각아이디문제언어결과실행 시간메모리
1364612NewtonabcTopical (NOI23_topical)C++20
21 / 100
554 ms158444 KiB
#include<bits/stdc++.h>
using namespace std;
vector<int> c,arr,id,hv;
vector<vector<pair<int,int>>> f;
int main(){
    int n,k; cin>>n >>k;
    vector<vector<int>> r,u;
    r.resize(n+1,vector<int>(k+1,0));
    u.resize(n+1,vector<int>(k+1,0));
    f.resize(max(n,k)+1);
    c.resize(max(n,k)+1);
    hv.resize(max(n,k)+1);
    arr.resize(max(n,k)+1);
    for(int i=1;i<=n;i++){
        for(int j=1;j<=k;j++){
            cin>>r[i][j];
            f[j].push_back({r[i][j],i});
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=k;j++){
            cin>>u[i][j];
        }
    }
    id.resize(n+1,0);
    for(int i=1;i<=k;i++) sort(f[i].begin(),f[i].end());
    queue<int> q;
    for(int i=1;i<=k;i++){
        while(id[i]<f[i].size() && f[i][id[i]].first<=hv[i]){
            auto [val,idx]=f[i][id[i]];
            c[idx]++;
            if(c[idx]==k){
                q.push(idx);
            }
            id[i]++;
        }
    }
    int ret=0;
    while(!q.empty()){
        int x=q.front();
        q.pop();
        for(int i=1;i<=k;i++){
            hv[i]+=u[x][i];
        }
        ret++;
        for(int i=1;i<=k;i++){
            while(id[i]<f[i].size() && f[i][id[i]].first<=hv[i]){
                auto [val,idx]=f[i][id[i]];
                c[idx]++;
                if(c[idx]==k){
                    q.push(idx);
                }
                id[i]++;
            }
        }
    }
    cout<<ret;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…