제출 #1226636

#제출 시각아이디문제언어결과실행 시간메모리
1226636ssafarovMinerals (JOI19_minerals)C++20
0 / 100
0 ms424 KiB
#define Magic ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#pragma GCC optimize("Ofast")
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include "minerals.h"
#define ll int
#define ld long long double
#define en '\n'
#define tsts int tetss; cin >> tetss; while(tetss--)
#define all(a) a.begin() , a.end()
#define pb push_back
#define ld long long double
#define fi first
#define se second

using namespace std;

int lst;
int op[100000] = {};
int pos[100000] = {};

void func(vector<int> v, bool ok){
	// cout << lst << " " << ok << en;
	// for(auto g : v) cout << g << " ";
	// cout << en;
	vector<int> v1, v2;
	int st = lst;
	int gps = v.size() / 2;
	if(v.size() == 2){
		Answer(v[0], v[1]);
		return;
	}
	if(ok){
		int sb = (gps + 1) / 2;
		for(auto g : v){
			int nw = lst;
			if(op[g]){
				if(sb){
					v1.push_back(g);
					sb--;
				}else{
					v2.push_back(g);
					nw = Query(g);
					pos[g] ^= 1;
				}
			}else{
				nw = Query(g);
				if(pos[g]){
					if(nw == lst){
						v1.push_back(g);
					}else{
						v2.push_back(g);
					}
				}else{
					if(nw != lst){
						v1.push_back(g);
					}else{
						v2.push_back(g);
					}
				}
				pos[g] ^= 1;
			}
			lst = nw;
		}
		func(v1, !ok);
		func(v2, ok);
	}else{
		int sb = (gps + 1) / 2;
		for(auto g : v){
			int nw = lst;
			if(op[g]){
				if(sb){
					v1.push_back(g);
					sb--;
				}else{
					v2.push_back(g);
					nw = Query(g);
					pos[g] ^= 1;
				}
			}else{
				nw = Query(g);
				if(pos[v[0]]){
					if(nw == lst){
						v1.push_back(g);
					}else{
						v2.push_back(g);
					}
				}else{
					if(nw != lst){
						v1.push_back(g);
					}else{
						v2.push_back(g);
					}
				}
				pos[g] ^= 1;
			}
			lst = nw;
		}
		func(v1, !ok);
		func(v2, ok);
	}
	// if(ok == 1){
		// return;
	// }
}

void Solve(int n){
	assert(0);
	for(int i = 1; i <= 2 * n; ++i){
		int nw = Query(i);
		pos[i] = 1;
		if(nw != lst) op[i] = 1;
		lst = nw;
	}
	vector<int> v;
	for(int i = 1; i <= 2 * n; ++i){
		v.push_back(i);
	}
	func(v, 1);
}

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