Submission #1168993

#TimeUsernameProblemLanguageResultExecution timeMemory
1168993aentrenusJelly Flavours (IOI20_jelly)C++20
0 / 100
0 ms328 KiB
#include "jelly.h"
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
using ull = unsigned long long;
using vi = vector<int>;
using vl = vector<ll>;
using vb = vector<bool>;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
using str = string;
#define all(a) a.begin(), a.end()
#define print(a) for (auto elem:a) cout<<elem<<' '; cout<<'\n'
#define segprep(b) resize(1<<((int)ceil(log2(b.size()))+1))
#define FOR(a) for (int _ = 0; _ < a; _++)

int n;

int solve1(int &x, int &y, vi &a, vi &b){
	vi for_a, for_b;
	int best = 0;
	for (int mask = 0; mask < (1<<n); mask++){
		for_a.clear();
		for_b.clear();
		for (int i = 0; i < n; i++){
			if (mask&(1<<i)){
				for_b.push_back(b.at(i));
			}
			else{
				for_a.push_back(a.at(i));
			}
		}
		ranges::sort(for_a);
		ranges::sort(for_b);
		// print(for_a);
		// print(for_b);
		int ans = 0, a_sum = 0, b_sum = 0;
		for (int i = 0; i < (int)for_a.size(); i++){
			a_sum += for_a.at(i);
			if (a_sum > x){
				ans += i;
				break;
			}
		}
		if (a_sum < x) ans += for_a.size();
		for (int i = 0; i < (int)for_b.size(); i++){
			b_sum += for_b.at(i);
			if (b_sum > y){
				ans += i;
				break;
			}
		}
		// cout<<"mask: "<<mask<<'\n';
		// print(for_a);
		// print(for_b);
		// cout<<"ans: "<<ans<<'\n';
		if (b_sum < x) ans += for_b.size();
		best = max(best, ans);
	}
	return best;
}

int solve3(int &x, vi &a){
	// O CHUJ CHODZI
	sort(all(a));
	for (int i = 0; i < n; i++){
		// cerr<<"x: "<<x<<", a[i]: "<<a.at(i)<<'\n';
		if (x >= a.at(i)){
			x -= a.at(i);
			continue;
		}
		return i;
	}
	return n;
}

int find_maximum_unique(int x, int y, vi a, vi b) {
	n = a.size();

	if (y == 0) return solve3(x, a);
	if (n <= 12) return solve1(x, y, a, b);
	return 0;
}

// static int n, x, y;
// static std::vector<int> a, b;

// int main() {
//     assert(scanf("%d %d %d", &n, &x, &y) == 3);
//     a.resize(n);
//     b.resize(n);
//     for (int i = 0; i < n; i++) {
//         assert(scanf("%d %d", &a[i], &b[i]) == 2);
//     }

//     fclose(stdin);

//     int answer = find_maximum_unique(x, y, a, b);

//     printf("%d\n", answer);
// }

#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...