Submission #969971

#TimeUsernameProblemLanguageResultExecution timeMemory
969971LCJLYPark (JOI17_park)C++14
10 / 100
76 ms684 KiB
#include "park.h"

//code
//Answer(a,b)
//Ask(a,b,Place)
#include <bits/stdc++.h>
using namespace std;

#define show(x,y) cout << y << " " << #x << endl;
#define show2(x,y,i,j) cout << y << " " << #x << "  " << j << " " << #i << endl;
#define show3(x,y,i,j,p,q) cout << y << " " << #x << "  " << j << " " << #i << "  " << q << " " << #p << endl;
#define show4(x,y) for(auto it:y) cout << it << " "; cout << #x << endl;
typedef pair<long long,long long>pii;
typedef pair<int,pii>pi2;

int m=0;
vector<pii>edge;
void dnc(int l, int r){
	int lft=0;
	int rgt=m-1;
	int mid;
	int best=rgt+1;
	
	while(lft<=rgt){
		mid=(lft+rgt)/2;
		int v[m];
		memset(v,0,sizeof(v));
		for(int x=0;x<=mid;x++){
			v[x]=1;
		}
		v[l]=1;
		v[r]=1;
		//show4(v,v);
		//show2(l,l,r,r);
		bool amos=Ask(min(l,r),max(l,r),v);
		if(amos){
			rgt=mid-1;
		}
		else{
			best=mid;
			lft=mid+1;
		}
	}
	
	if(best==m){
		edge.push_back({l,r});
	}
	else{
		//show(best,best+1);
		dnc(l,best+1);
		dnc(best+1,r);
	}
}

void Detect(int t, int n) {
	//show2(t,t,n,n);
	m=n;
	dnc(0,n-1);
	
	for(auto &it:edge){
		if(it.first>it.second) swap(it.first,it.second);
		//show2(it.first,it.first,it.second,it.second);
		Answer(it.first,it.second);
	}
}
//code
#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...