제출 #683969

#제출 시각아이디문제언어결과실행 시간메모리
683969rainboyPark (JOI17_park)C++17
20 / 100
153 ms468 KiB
#include "park.h" #include <string.h> const int N = 1400; int t, n; int query(int *used, int a, int b) { int tmp; if (a > b) tmp = a, a = b, b = tmp; return Ask(a, b, used); } void answer(int a, int b) { int tmp; if (a > b) tmp = a, a = b, b = tmp; Answer(a, b); } int compare(int a, int b) { if (a == b) return 0; if (a == 0) return -1; if (b == 0) return 1; int used[N]; for (int i = 0; i < n; i++) used[i] = i != a; return query(used, 0, b) ? 1 : -1; } void merge(int *ii, int n1, int n2) { static int ii_[N]; int i1 = 0, i2 = 0, i = 0; while (i1 < n1 || i2 < n2) ii_[i++] = i2 == n2 || i1 < n1 && compare(ii[i1], ii[n1 + i2]) < 0 ? ii[i1++] : ii[n1 + i2++]; memcpy(ii, ii_, (n1 + n2) * sizeof *ii_); } void mergesort(int *ii, int n) { if (n == 1) return; int m = (n + 1) / 2; mergesort(ii, m), mergesort(ii + m, n - m); merge(ii, m, n - m); } void Detect(int t_, int n_) { t = t_, n = n_; if (t == 1) { static int used[N]; for (int i = 0; i < n; i++) for (int j = i + 1; j < n; j++) { for (int k = 0; k < n; k++) used[k] = k == i || k == j ? 1 : 0; if (query(used, i, j)) answer(i, j); } } else if (t == 2) { static int ii[N]; for (int i = 0; i < n; i++) ii[i] = i; mergesort(ii, n); for (int h = 1; h < n; h++) answer(ii[h - 1], ii[h]); } }

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

park.cpp: In function 'void merge(int*, int, int)':
park.cpp:39:34: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
   39 |   ii_[i++] = i2 == n2 || i1 < n1 && compare(ii[i1], ii[n1 + i2]) < 0 ? ii[i1++] : ii[n1 + i2++];
      |                          ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...