#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;
set<pii>edge;
bool memo[1405][1405];
void dnc(int l, int r){
if(memo[l][r]) return;
memo[l][r]=true;
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.insert({min(l,r),max(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;
for(int x=1;x<n;x++){
dnc(0,n-1);
}
//dnc(0,n-1);
for(auto &it:edge){
//show2(it.first,it.first,it.second,it.second);
Answer(it.first,it.second);
}
}
//code
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
1 ms |
348 KB |
Wrong Answer[6] |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
22 ms |
2824 KB |
Output is correct |
2 |
Correct |
91 ms |
2536 KB |
Output is correct |
3 |
Correct |
62 ms |
2644 KB |
Output is correct |
4 |
Correct |
26 ms |
2576 KB |
Output is correct |
5 |
Correct |
23 ms |
2392 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
1 ms |
348 KB |
Wrong Answer[6] |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
1 ms |
344 KB |
Wrong Answer[6] |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
1 ms |
600 KB |
Wrong Answer[6] |
2 |
Halted |
0 ms |
0 KB |
- |