제출 #46877

#제출 시각아이디문제언어결과실행 시간메모리
46877bugmenot111사육제 (CEOI14_carnival)C++17
100 / 100
19 ms616 KiB
#include <cstdio> #include <vector> #include <algorithm> typedef std::vector<int> vector; int query(vector v) { // this is why C++ > Haskell int ans; if(v.size() == 0) return 0; printf("%lu", v.size()); for(int c: v) printf(" %d", c); putchar('\n'); fflush(stdout); scanf("%d", &ans); return ans; } void yes(vector v) { putchar('0'); for(int c: v) printf(" %d", c); putchar('\n'); fflush(stdout); } vector solve(int l, int r) { int m, l1, r1, m1, i, j, mx1, mx2, c, cur; int rep1[210] = {0}; int rep2[210] = {0}; int now[210] = {0}; vector v1, v2, qr; if(l == r) return {1}; m = (l + r) / 2; v1 = solve(l, m); v2 = solve(m + 1, r); for(i = 0; i < v1.size(); i++) rep1[v1[i]] = l + i; for(i = 0; i < v2.size(); i++) rep2[v2[i]] = m + 1 + i; mx1 = *std::max_element(v1.begin(), v1.end()); mx2 = *std::max_element(v2.begin(), v2.end()); cur = mx2; for(i = 1; i <= mx1; i++) { c = rep1[i]; l1 = 1; r1 = mx2 + 1; while(l1 < r1) { m1 = (l1 + r1) / 2; for(j = 1; j <= m1; j++) qr.push_back(rep2[j]); qr.push_back(c); if(m1 == mx2 + 1 || query(qr) == m1) r1 = m1; else l1 = m1 + 1; qr.clear(); } now[i] = l1 == mx2 + 1 ? ++cur : l1; } for(i = 0; i < v1.size(); i++) v1[i] = now[v1[i]]; v1.insert(v1.end(), v2.begin(), v2.end()); return v1; } int main(void) { int n; scanf("%d", &n); yes(solve(1, n)); return 0; }

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

carnival.cpp: In function 'vector solve(int, int)':
carnival.cpp:31:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(i = 0; i < v1.size(); i++) rep1[v1[i]] = l + i;
             ~~^~~~~~~~~~~
carnival.cpp:32:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(i = 0; i < v2.size(); i++) rep2[v2[i]] = m + 1 + i;
             ~~^~~~~~~~~~~
carnival.cpp:50:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(i = 0; i < v1.size(); i++)
             ~~^~~~~~~~~~~
carnival.cpp: In function 'int query(vector)':
carnival.cpp:12:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d", &ans);
  ~~~~~^~~~~~~~~~~~
carnival.cpp: In function 'int main()':
carnival.cpp:57:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d", &n);
  ~~~~~^~~~~~~~~~
#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...