제출 #546033

#제출 시각아이디문제언어결과실행 시간메모리
546033blueICC (CEOI16_icc)C++17
100 / 100
228 ms648 KiB
#include "icc.h" #include <vector> #include <algorithm> #include <queue> #include <iostream> #include <random> using namespace std; using vi = vector<int>; using vvi = vector<vi>; #define sz(x) int(x.size()) const int mx = 100; int getRandom(int a, int b) { return a + (rand() % (b-a+1)); } int vquery(vi A, vi B) { int a[mx], b[mx]; for(int ai = 0; ai < sz(A); ai++) a[ai] = A[ai]; for(int bi = 0; bi < sz(B); bi++) b[bi] = B[bi]; if(sz(A) == 0 || sz(B) == 0) return 0; return query(sz(A), sz(B), a, b); } void run(int N) { srand(10); vi edge[1+N]; for(int e = 1; e <= N-1; e++) { cerr << "\n\n\n\n\n"; cerr << "e = " << e << '\n'; vi cc(1+N, -1); int ccc = 0; for(int i = 1; i <= N; i++) { if(cc[i] != -1) continue; ccc++; queue<int> tbv; tbv.push(i); while(!tbv.empty()) { int u = tbv.front(); tbv.pop(); cc[u] = ccc - 1; cerr << u << " <> " << ccc << '\n'; for(int v : edge[u]) { if(cc[v] != -1) continue; tbv.push(v); } } } for(int i = 1; i <= N; i++) cerr << cc[i] << ' '; cerr << '\n'; int k = 0; while((1<<k) < N) k++; vi bits; for(int v = 0; v < k; v++) bits.push_back(v); for(int t = 0; t < 2'000; t++) { int p = getRandom(0, k-1); int q = getRandom(0, k-1); if(getRandom(0, 1)) swap(bits[p], bits[q]); } int goodbit; vi S[2]; for(int b : bits) { vi s[2]; for(int i = 1; i <= N; i++) s[bool(cc[i] & (1<<b))].push_back(i); if(b == bits.back() || vquery(s[0], s[1])) { S[0] = s[0]; S[1] = s[1]; break; } } while(sz(S[0]) > 1) { vi SS[2]; for(int i = 0; i < sz(S[0])/2; i++) SS[0].push_back(S[0][i]); for(int i = sz(S[0])/2; i < sz(S[0]); i++) SS[1].push_back(S[0][i]); if(vquery(SS[0], S[1])) S[0] = SS[0]; else S[0] = SS[1]; } while(sz(S[1]) > 1) { vi SS[2]; for(int i = 0; i < sz(S[1])/2; i++) SS[0].push_back(S[1][i]); for(int i = sz(S[1])/2; i < sz(S[1]); i++) SS[1].push_back(S[1][i]); if(vquery(SS[0], S[0])) S[1] = SS[0]; else S[1] = SS[1]; } int u = S[0][0], v = S[1][0]; setRoad(u, v); edge[u].push_back(v); edge[v].push_back(u); } }

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

icc.cpp: In function 'void run(int)':
icc.cpp:92:7: warning: unused variable 'goodbit' [-Wunused-variable]
   92 |   int goodbit;
      |       ^~~~~~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...