제출 #1359481

#제출 시각아이디문제언어결과실행 시간메모리
1359481jumpTopical (NOI23_topical)C++20
100 / 100
252 ms81640 KiB
#include <bits/stdc++.h>
#define int long long
int n,k;
int tgain[1000010];
int have[1000010];
std::vector<std::pair<int,int>> req[1000010];
std::vector<std::vector<int>> mgain;
signed main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(nullptr);
  std::cin >> n >> k;
  mgain.resize(n+2);
  for(int i=1;i<=n;i++){
    for(int j=1;j<=k;j++){
      int creq;std::cin >> creq;
      if(creq>0)
      req[j].push_back({creq,i});
      else
      tgain[i]+=1;
    }
  }
  for(int j=1;j<=k;j++){
    std::sort(req[j].rbegin(),req[j].rend());
  }
  for(int i=1;i<=n;i++){
    mgain[i].push_back(0);
    for(int j=1;j<=k;j++){
      int gv;std::cin >> gv;
      mgain[i].push_back(gv);
    }
  }
  std::queue<int> q;
  for(int i=1;i<=n;i++){
    if(tgain[i]==k)q.push(i);
  }
  int curr=0;
  while(!q.empty()){
    int learn = q.front();q.pop();
    curr+=1;
    for(int i=1;i<=k;i++){
      have[i]+=mgain[learn][i];
      //std::cout << have[i] << ' ';
      while(!req[i].empty()&&have[i]>=req[i].back().first){
        tgain[req[i].back().second]+=1;
        if(tgain[req[i].back().second]==k)q.push(req[i].back().second);
        req[i].pop_back();
      }
    }
    //std::cout << '\n';
  }
  std::cout << curr;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…