제출 #247352

#제출 시각아이디문제언어결과실행 시간메모리
247352lycMouse (info1cup19_mouse)C++14
13 / 100
25 ms528 KiB
#include "grader.h" #include <bits/stdc++.h> using namespace std; #define TRACE(x) cerr << #x << " :: " << x << endl #define _ << " " << #define SZ(x) (int)(x).size() #define ALL(x) (x).begin(),(x).end() #define FOR(i,a,b) for(int i=(a);i<=(b);++i) #define RFOR(i,a,b) for (int i=(a);i>=(b);--i) int ask(vector<int>& q) { return query(q); } const int mxN = 257; int N; int am[mxN][mxN]; vector<int> al[mxN]; bool vis[mxN]; vector<int> p, q, ans; vector<int> getcyc(int u, int i) { vector<int> cyc = { u, al[u][0] }; u = al[u][0]; while (1) { for (int v : al[u]) if (v != cyc[SZ(cyc)-2]) { u = v; break; } if (u == cyc[0]) break; else cyc.push_back(u); } return cyc; } void solve(int n) { N = n; p.assign(N,0); ans.assign(N,-1); iota(ALL(p),1); int r = ask(p); if (r == N) return; FOR(i,0,N-1) if (ans[i] == -1) { bool ok = 1; FOR(j,0,N-1) if (i != j) { int v; if (j < i) v = am[j][i]; else { swap(p[i],p[j]); v = am[i][j] = ask(p); swap(p[i],p[j]); } if (v-r >= 0) ok = 0; } if (ok) { ans[i] = p[i]; FOR(j,0,N-1) if (i != j) { int v = (j < i ? am[j][i] : am[i][j]); if (v-r == -2) ans[j] = p[j]; } } else { FOR(j,0,N-1) if (i != j) { int v = (j < i ? am[j][i] : am[i][j]); if (v-r == -1) ans[j] = p[j]; else if (v-r == 1) { al[i].push_back(j); al[j].push_back(i); } else if (v-r == 2) ans[i] = p[j], ans[j] = p[i]; } } } //FOR(i,0,N-1){ FOR(j,0,N-1){ cout << am[i][j] << ' '; } cout << endl; } FOR(i,0,N-1) if (ans[i] != -1) p[i] = ans[i]; memset(vis,0,sizeof vis); q.assign(N,0); FOR(i,0,N-1) q[i] = p[i]; FOR(i,0,N-1) if (!vis[i] && SZ(al[i])) { auto x = getcyc(i,i); FOR(i,0,SZ(x)-1) { q[x[i]] = p[x[(i+1)%SZ(x)]]; vis[x[i]] = 1; } } //FOR(i,0,N-1) cout << q[i] << ' '; //cout << endl; int s = ask(q); if (s == N) return; memset(vis,0,sizeof vis); FOR(i,0,N-1) if (!vis[i] && SZ(al[i])) { int u = i; auto x = getcyc(i,i); reverse(ALL(x)); FOR(i,0,SZ(x)-1) { q[x[i]] = p[x[(i+1)%SZ(x)]]; vis[x[i]] = 1; } int t = ask(q); if (t == N) return; if (t < s) { reverse(ALL(x)); FOR(i,0,SZ(x)-1) { q[x[i]] = p[x[(i+1)%SZ(x)]]; } } } //FOR(i,0,N-1) cout << ans[i] << ' '; //cout << endl; }

컴파일 시 표준 에러 (stderr) 메시지

mouse.cpp: In function 'void solve(int)':
mouse.cpp:98:13: warning: unused variable 'u' [-Wunused-variable]
         int u = i;
             ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...