제출 #1369509

#제출 시각아이디문제언어결과실행 시간메모리
1369509gohchingjaykTopical (NOI23_topical)C++20
100 / 100
240 ms85384 KiB
#pragma GCC optimize("O3,inline")
#include <bits/stdc++.h>

using namespace std;

using ll = long long;
#define int ll

using ii = pair<int, int>;
using iii = pair<ii, int>;

constexpr int MAXN = 1'000'000 + 5;
constexpr int INF = 1e18 + 5;
constexpr int LOG = 20;

signed main() {
	cin.tie(nullptr)->sync_with_stdio(false); cout.tie(nullptr);

	int N, K; cin >> N >> K;
	vector<vector<ii>> per_topic(K, vector<ii>(N));
	vector<vector<int>> bonus(N, vector<int>(K));
	vector<int> curr(K);
	vector<int> cnt(N);

	vector<int> addable;
	
	for (int i = 0; i < N; ++i) {
		for (int j = 0; j < K; ++j) {
			int x; cin >> x;
			per_topic[j][i] = ii{x, i};
		}
	}
	
	for (int i = 0; i < N; ++i) {
		for (int j = 0; j < K; ++j) {
			cin >> bonus[i][j];
		}
	}
	
	for (int i = 0; i < K; ++i) sort(per_topic[i].begin(), per_topic[i].end(), greater<ii>{});

	int ans = 0;
	while (true) {
		for (int i = 0; i < K; ++i) {
			while (!per_topic[i].empty() && per_topic[i].back().first <= curr[i]) {
				int j = per_topic[i].back().second;
				per_topic[i].pop_back();
				cnt[j]++;
				if (cnt[j] == K) addable.emplace_back(j);
			}
		}
		
		if (addable.empty()) break;
		
		for (int j : addable) {
			ans++;
			for (int i = 0; i < K; ++i) {
				curr[i] += bonus[j][i];
			}
		}
		
		addable.clear();
	}

	cout << ans;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…