제출 #1313160

#제출 시각아이디문제언어결과실행 시간메모리
1313160miniobTopical (NOI23_topical)C++20
100 / 100
276 ms133492 KiB
#include <bits/stdc++.h>
using namespace std;

int main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	long long n, k;
	cin >> n >> k;
	long long umiejetnosci[n + 3][k + 3];
	long long zysk[n + 3][k + 3];
	long long cur[k + 7];
	vector<pair<long long, long long>> wymaganie_pos[k + 3];
	long long gdzie_jestem[k + 7];
	long long wilulepszy[n + 7];
	for (long long i = 0; i < k; i++)
	{
		cur[i] = 0;
		gdzie_jestem[i] = 0;
	}
	for (long long i = 0; i < n; i++)
	{
		wilulepszy[i] = 0;
	}
	for (long long i = 0; i < n; i++)
	{
		for (long long j = 0; j < k; j++)
		{
			cin >> umiejetnosci[i][j];
			wymaganie_pos[j].push_back({ umiejetnosci[i][j] , i });
		}
	}
	for (long long i = 0; i < k; i++)
	{
		sort(wymaganie_pos[i].begin(), wymaganie_pos[i].end());
	}
	for (long long i = 0; i < n; i++)
	{
		for (long long j = 0; j < k; j++)
		{
			cin >> zysk[i][j];
		}
	}
	long long odp = 0;
	vector<long long> wygram;
	while (true)
	{
		for (long long i = 0; i < k; i++)
		{
			while (gdzie_jestem[i] < n && wymaganie_pos[i][gdzie_jestem[i]].first <= cur[i])
			{
				wilulepszy[wymaganie_pos[i][gdzie_jestem[i]].second]++;
				if (wilulepszy[wymaganie_pos[i][gdzie_jestem[i]].second] == k)
				{
					odp++;
					wygram.push_back(wymaganie_pos[i][gdzie_jestem[i]].second);
				}
				gdzie_jestem[i]++;
			}
		}
		if (wygram.size() == 0)
		{
			cout << odp << endl;
			return 0;
		}
		else
		{
			for (auto x : wygram)
			{
				for (long long i = 0; i < k; i++)
				{
					cur[i] += zysk[x][i];
				}
			}
			wygram.clear();
		}
	}
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...