This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "Memory2_lib.h"
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e3 + 5;
int n;
int bad[maxn];
vector<int> pos[maxn];
int rec[maxn][maxn];
int ask(int x, int y) {
if(x>y) swap(x,y);
if(rec[x][y]!=-1) return rec[x][y];
return rec[x][y] = Flip(x,y);
}
int solve(int x) {
for(int i=0;i<n;i++) pos[i].clear();
for(int i=0;i<2*n;i++) {
if(i!=x) pos[ask(i,x)].push_back(i);//, printf("%d : %d\n",i,ask(i,x));
}
int cnt = 0;
for(int i=0;i<n;i++) {
if(pos[i].size()==1) pos[i].push_back(x), cnt++;
if(pos[i].size()!=2) return 0;
}
if(cnt>1) return 0;
for(int i=0;i<n;i++) Answer(pos[i][0],pos[i][1],i);
return 1;
}
void Solve(int T, int N) {
memset(rec,-1,sizeof(rec));
n = N;
int x = 0, noey = 0;
while(1) {
// printf("x = %d\n",x);
int ok = 0;
for(int y=x+1;y<2*n;y++) {
if(bad[y]) continue;
int tmp = ask(x,y);
// printf("\ty = %d : %d\n",y,tmp);
pos[tmp].push_back(y);
if(pos[tmp].size()==3) {
x = pos[tmp][0]; noey = pos[tmp][1];
for(int i=0;i<n;i++) {
if(i==tmp) continue;
for(auto t : pos[i]) bad[t] = 1;
}
for(int i=0;i<n;i++) pos[i].clear();
ok = 1;
break;
}
}
if(!ok) break;
}
if(solve(x)) return ;
solve(noey);
return ;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |