Submission #1226125

#TimeUsernameProblemLanguageResultExecution timeMemory
1226125lolokaMinerals (JOI19_minerals)C++20
0 / 100
1 ms420 KiB
#include "minerals.h"
#include<bits/stdc++.h>
using namespace std;

mt19937 rng(time(0));

void slv(vector<int> v1, vector<int> v2, int z) {
	//cout << "\n";
	if((int)v1.size() == 1) {
		Answer(v1[0], v2[0]);
		return;
	}
	int kl = z;
	int n = (int)v1.size();
	vector<int> h11, h12, h21, h22;
	for(int i = 0; i < n / 2; i++) h11.push_back(v1[i]);
	for(int i = n / 2; i < n; i++) h21.push_back(v1[i]);
	map<int, int> mp, mp1;
	int kl2 = 0;
	shuffle(v2.begin(), v2.end(), rng);
	for(int i = 0; i < n; i++) {
		if((int)h12.size() == n / 2) h22.push_back(v2[i]);
		else if((int)h22.size() == n - n / 2) h12.push_back(v2[i]);
		else {
			int k = Query(v2[i]); 
			if(k == kl) h12.push_back(v2[i]), mp[i] = 1;
			else h22.push_back(v2[i]), mp1[v2[i]] = 1;
			kl = k;
		}
	}
	for(int i = n / 4; i < n / 2; i++) kl = Query(v1[i]);
	for(int i = 0; i < n; i++) if(mp[i] == 1) kl = Query(v2[i]), mp.erase(i);
	slv(h11, h12, mp.size());
	swap(h21, h22);
	for(int i = 0; i < n / 4; i++) {
		if(!mp1[h21[i]]) Query(h21[i]);
	}
	for(int i = n / 4; i < n / 2; i++) {
		if(mp1[h21[i]]) Query(h21[i]);
	} 
	slv(h21, h22, n / 4);
}

void Solve(int n) {
	vector<int> v1, v2;
	int kl = 0;
	for(int i = 1; i <= 2 * n; i++) {
		int k = Query(i);
		if(k == kl) v2.push_back(i);
		else v1.push_back(i);
		kl = k;
	}
	for(int i = n / 2; i < n; i++) Query(v1[i]);
	for(auto i : v2) Query(i);
	slv(v1, v2, 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...
#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...