제출 #1076808

#제출 시각아이디문제언어결과실행 시간메모리
1076808daoquanglinh2007ICC (CEOI16_icc)C++17
컴파일 에러
0 ms0 KiB
#include "icc.h" #include <bits/stdc++.h> using namespace std; #define isz(a) (int)(a).size() const int NM = 100; int parent[NM+5], sz[NM+5], id[NM+5], k; vector <int> arr[NM+5]; vector <int> f, g; void make_set(int v){ parent[v] = v; sz[v] = 1; arr[v] = {v}; } int find_set(int v){ return parent[v] == v ? v : parent[v] = find_set(parent[v]); } void union_sets(int u, int v){ u = find_set(u); v = find_set(v); if (u == v) return; if (sz[u] < sz[v]) swap(u, v); parent[v] = u; sz[u] += sz[v]; for (int x : arr[v]) arr[u].push_back(x); arr[v].clear(); } int ask(vector <int> &X, vector <int> &Y){ return query(isz(X), isz(Y), X, Y); } void guess(int u, int v){ setRoad(u, v); } void run(int n){ for (int i = 1; i <= n; i++) make_set(i); for (int i = 1; i < n; i++){ k = 0; for (int j = 1; j <= n; j++) if (parent[j] == j) id[k++] = j; int s = 0; for (int b = 0; b <= __lg(k-1); b++){ vector <int> X = {}, Y = {}; for (int j = 0; j < k; j++) for (int v : arr[id[j]]) if ((j>>b)&1) X.push_back(v); else Y.push_back(v); if (ask(X, Y)) s ^= (1<<b); } f.clear(); g.clear(); for (int u = 0; u < k; u++){ int v = u^s; if (u < v && v < k){ f.push_back(u); g.push_back(v); } } int l = 0, r = isz(f)-2, res = isz(f)-1; while (l <= r){ int mid = (l+r)/2; vector <int> X = {}, Y = {}; for (int j = 0; j <= mid; j++){ for (int v : arr[id[f[j]]]) X.push_back(v); for (int v : arr[id[g[j]]]) Y.push_back(v); } if (ask(X, Y)){ res = mid; r = mid-1; } else l = mid+1; } int resf = isz(arr[id[f[res]]])-1, resg = isz(arr[id[g[res]]])-1; l = 0, r = resf-1; while (l <= r){ int mid = (l+r)/2; vector <int> X = {}, Y = arr[id[g[res]]]; for (int j = 0; j <= mid; j++) X.push_back(arr[id[f[res]]][j]); if (ask(X, Y)){ resf = mid; r = mid-1; } else l = mid+1; } l = 0, r = resg-1; while (l <= r){ int mid = (l+r)/2; vector <int> X = arr[id[f[res]]], Y = {}; for (int j = 0; j <= mid; j++) Y.push_back(arr[id[g[res]]][j]); if (ask(X, Y)){ resg = mid; r = mid-1; } else l = mid+1; } int u = arr[id[f[res]]][resf], v = arr[id[g[res]]][resg]; guess(u, v); union_sets(u, v); } return 0; }

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

icc.cpp: In function 'int ask(std::vector<int>&, std::vector<int>&)':
icc.cpp:35:31: error: cannot convert 'std::vector<int>' to 'int*'
   35 |  return query(isz(X), isz(Y), X, Y);
      |                               ^
      |                               |
      |                               std::vector<int>
In file included from icc.cpp:1:
icc.h:10:30: note:   initializing argument 3 of 'int query(int, int, int*, int*)'
   10 | int query(int a, int b, int *A, int *B);
      |                         ~~~~~^
icc.cpp: In function 'void run(int)':
icc.cpp:109:12: error: return-statement with a value, in function returning 'void' [-fpermissive]
  109 |     return 0;
      |            ^