제출 #1281307

#제출 시각아이디문제언어결과실행 시간메모리
1281307AMnuTopical (NOI23_topical)C++20
100 / 100
232 ms28144 KiB
#include <bits/stdc++.h>
#define fi first
#define se second
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;

int N, K, ans;
queue <int> Q;

int main () {
	ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    cin >> N >> K;
    pii R[K][N];
    int U[N+1][K];
    ll skill[K];
    int point[K], done[N];
    memset(skill,0,sizeof(skill));
    memset(point,0,sizeof(point));
    memset(done,0,sizeof(done));
    for (int i=0;i<N;i++) {
        for (int j=0;j<K;j++) {
            cin >> R[j][i].fi;
            R[j][i].se = i;
        }
    }
    for (int i=0;i<N;i++) {
        for (int j=0;j<K;j++) {
            cin >> U[i][j];
        }
    }
    for (int i=0;i<K;i++) {
        sort(R[i],R[i]+N);
        U[N][i] = 0;
    }
    queue <int> Q;
    Q.push(N);
    while (!Q.empty()) {
        int x = Q.front();
        Q.pop();
        for (int i=0;i<K;i++) {
            skill[i] += U[x][i];
            while (point[i] < N && R[i][point[i]].fi <= skill[i]) {
                done[R[i][point[i]].se]++;
                if (done[R[i][point[i]].se] == K) {
                    Q.push(R[i][point[i]].se);
                    ans++;
                }
                point[i]++;
            }
        }
    }
    cout << ans << "\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...