Submission #1327859

#TimeUsernameProblemLanguageResultExecution timeMemory
1327859PieArmyPark (JOI17_park)C++20
10 / 100
486 ms784 KiB
#include<bits/stdc++.h>
typedef long long ll;
#define pb push_back
#define fr first
#define sc second
#define endl '\n'
using namespace std;
#define mid ((left+right)>>1)
#include "park.h"
mt19937 rng(chrono::high_resolution_clock().now().time_since_epoch().count());
int rint(int a,int b){
	int ans=0;
	ans=a+(rng()%(b-a+1));
	return ans;
}

int n;
static int arr[1400];

set<pair<int,int>>soruldu;

void answer(int x,int y){
	if(x>y)swap(x,y);
	if(soruldu.count({x,y}))return;
	soruldu.insert({x,y});
	Answer(x,y);
}

bool ask(int x,int y){
	if(x>y)swap(x,y);
	if(x==y)return true;
	return Ask(x,y,arr);
}

void f(vector<int>v){
	if(v.size()<=1)return;
	shuffle(v.begin(),v.end(),rng);
	int root=v.back();
	v.pop_back();
	int m=v.size();
	vector<vector<int>>nex={{v[0]}};
	for(int i=1;i<m;i++){
		for(int j=0;j<n;j++){
			arr[j]=0;
		}
		for(int x:v){
			arr[x]=1;
		}
		sort(nex.begin(),nex.end(),[&](const auto&x,const auto&y){
			return x.size()>y.size();
		});
		bool var=false;
		for(auto&x:nex){
			if(ask(x.back(),v[i])){
				x.pb(v[i]);
				var=true;
				break;
			}
		}
		if(!var){
			nex.pb({v[i]});
		}
	}
	for(int i=0;i<m;i++){
		for(int j=0;j<n;j++){
			arr[j]=0;
		}
		arr[root]=arr[v[i]]=1;
		if(ask(root,v[i])){
			answer(root,v[i]);
		}
	}
	for(auto x:nex){
		f(x);
	}
}

void Detect(int T, int N) {
	n=N;
	vector<int>v(n);
	for(int i=0;i<n;i++){
		v[i]=i;
	}
	f(v);
}
#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...