제출 #1146051

#제출 시각아이디문제언어결과실행 시간메모리
1146051byunjaewoo카멜레온의 사랑 (JOI20_chameleon)C++20
20 / 100
26 ms496 KiB
#include "chameleon.h" #include <bits/stdc++.h> using namespace std; const int N=1010; int chk[2*N]; vector<int> adj[N]; void Solve(int N) { for(int i=1; i<=2*N; i++) { fill(chk+1, chk+2*N+1, -1); vector<int> a[2]; function<void(int, int)> dfs=[&](int curr, int c) { chk[curr]=c; a[c].push_back(curr); for(int next:adj[curr]) if(chk[curr]<0) dfs(next, 1-c); }; auto query2=[&](int a, int b) { vector<int> tmp; tmp.push_back(a), tmp.push_back(b); if(Query(tmp)!=1) return false; tmp.clear(); for(int i=1; i<=2*N; i++) if(i!=a && i!=b) tmp.push_back(i); return Query(tmp)<=N-1; }; for(int j=1; j<i; j++) if(chk[i]<0) dfs(j, 0); for(int j=0; j<2; j++) if(a[j].size()) { while(true) { a[j].push_back(i); if(Query(a[j])==a[j].size()) { a[j].pop_back(); break; } a[j].pop_back(); int p=0; for(int s=0, e=a[j].size()-1; s<e; ) { int m=(s+e)/2; vector<int> v; for(int k=s; k<=m; k++) v.push_back(a[j][k]); v.push_back(i); if(Query(v)==v.size()) s=p=m+1; else e=m; } if(query2(i, a[j][p])) Answer(i, a[j][p]); adj[i].push_back(a[j][p]), adj[a[j][p]].push_back(i); swap(a[j][p], a[j].back()), a[j].pop_back(); } } } }
#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...