Submission #35751

#TimeUsernameProblemLanguageResultExecution timeMemory
35751funcsrICC (CEOI16_icc)C++14
100 / 100
159 ms2220 KiB
#include "icc.h" #include <iostream> #include <vector> #include <tuple> #include <algorithm> #include <set> #include <cassert> #define rep(i, n) for (int i=0; i<(n); i++) #define pb push_back #define all(x) x.begin(), x.end() using namespace std; int ctr = 0; int query(vector<int> a, vector<int> b) { //cout<<"query({";for(int x:a)cout<<x<<",";cout<<"}, {";for(int x:b)cout<<x<<",";cout<<"})\n"; ctr++; int ar[100] = {}, br[100] = {}; rep(i, a.size()) ar[i] = a[i]+1; rep(i, b.size()) br[i] = b[i]+1; return query(a.size(), b.size(), ar, br); } int N; int U[100]; vector<int> R[100]; int find(int x) { if (U[x] == x) return x; return U[x] = find(U[x]); } void unite(int x, int y) { x = find(x), y = find(y); if (x == y) return; U[y] = x; for (int t : R[y]) R[x].pb(t); R[y].clear(); } vector<int> roots() { vector<int> ret; rep(i, N) if (find(i) == i) ret.pb(i); return ret; } pair<vector<int>, vector<int>> divide2() { vector<int> vs = roots(); int n = vs.size(); ctr = 0; rep(e, 7) { vector<int> a, b; rep(i, n) { if ((i>>e)&1) for (int x : R[vs[i]]) a.pb(x); else for (int x : R[vs[i]]) b.pb(x); } if (query(a, b)) return make_pair(a, b); } assert(false); } int find(vector<int> X, vector<int> other) { if (X.size() == 1) return X[0]; vector<int> a, b; int n = X.size(); rep(i, n) { if (i&1) b.pb(X[i]); else a.pb(X[i]); } if (query(a, other)) return find(a, other); else return find(b, other); } void run(int n) { N = n; rep(i, N) U[i] = i, R[i].pb(i); rep(_, N-1) { vector<int> a, b; tie(a, b) = divide2(); int u = find(a, b), v = find(b, a); unite(u, v); setRoad(u+1, v+1); } }

Compilation message (stderr)

icc.cpp: In function 'int query(std::vector<int>, std::vector<int>)':
icc.cpp:8:34: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 #define rep(i, n) for (int i=0; i<(n); i++)
                                  ^
icc.cpp:19:3: note: in expansion of macro 'rep'
   rep(i, a.size()) ar[i] = a[i]+1;
   ^
icc.cpp:8:34: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 #define rep(i, n) for (int i=0; i<(n); i++)
                                  ^
icc.cpp:20:3: note: in expansion of macro 'rep'
   rep(i, b.size()) br[i] = b[i]+1;
   ^
#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...