Submission #1295122

#TimeUsernameProblemLanguageResultExecution timeMemory
1295122am_aadvikLottery (JOI25_lottery)C++20
0 / 100
5094 ms5676 KiB
#define _CRT_SECURE_NO_WARNINGS
#include <vector>
#include<set>
#include<algorithm>
#include <iostream>
#include <cassert>
#include <cstdio>

void init(int N, int Q, std::vector<int> X, std::vector<int> Y);
int max_prize(int L, int R);
using namespace std;
#define SUBMIT 1

#ifndef SUBMIT
int main() {
	int N, Q;
	assert(scanf("%d %d", &N, &Q) == 2);

	std::vector<int> X(N), Y(N);
	for (int i = 0; i < N; i++) { assert(scanf("%d", &X[i]) == 1); }
	for (int i = 0; i < N; i++) { assert(scanf("%d", &Y[i]) == 1); }

	init(N, Q, X, Y);

	for (int k = 0; k < Q; k++) {
		int L, R;
		assert(scanf("%d %d", &L, &R) == 2);
		printf("%d\n", max_prize(L, R));
		fflush(stdout);
	}
}
#endif

vector<pair<int, int>> arr;
bool f = 0;
struct comp {
	bool operator()(const pair<int, int>& a, const pair<int, int>& b) const {
		if (a == b)return 0;
		if ((a.first - a.second) == (b.first - b.second)) 
		    return (f?(a.first>b.first):(a.second<b.second));
		return (a.first - a.second) > (b.first - b.second);
	}
};
void init(int n, int q, vector<int> x, vector<int> y) {
	for (int i = 0; i < n; ++i)
		arr.push_back({ x[i], y[i] });
}
int max_prize(int l, int r) {
	int s1 = 0, s2 = 0;
		for (int i = l; i <= r; ++i)
		 s1 += arr[i].first, s2 += arr[i].second;
	if (s1 > s2) f = 0; else f = 1;
	multiset<pair<int, int>, comp> a;
    for (int i = l; i <= r; ++i) a.insert(arr[i]);
	int n = a.size(), ans = 0;
	while (1) {
		int cnt = 0;
		bool ok = 1;
		auto s = a;
		for (auto x : a) {
			s.erase(s.find(x));
			if (cnt < (n / 2)) { //make red
				if (x.first == 0) { ok = 0; break; }
				s.insert({ x.first - 1, x.second });
			}
			else { //make blue
				if (x.second == 0) { ok = 0; break; }
				s.insert({ x.first, x.second - 1 });
			}
			++cnt;
		}
		if (!ok) break;
		++ans, a = s;
	}
	return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...