Submission #280226

#TimeUsernameProblemLanguageResultExecution timeMemory
280226spdskatrColors (BOI20_colors)C++14
43 / 100
1 ms416 KiB
#include <cstdio> #include <cstdlib> #include <algorithm> #include <cassert> #include <vector> #define K 32 using namespace std; int N; int seen[1005]; vector<int> qu; int last = 6969, actual; int query(int x) { #ifdef DEBUG //printf("query(%d)\n", x); assert(x > 0 && x <= N); int r = abs(x - last) >= actual; last = x; return r; #else printf("? %d\n", x); fflush(stdout); int res; scanf("%d", &res); last = x; return res; #endif } void answer(int ans) { printf("= %d\n", ans); fflush(stdout); exit(0); } int main() { scanf("%d", &N); #ifdef DEBUG scanf("%d", &actual); #endif assert(N <= 1000); qu.push_back(0); for (int i = 1; i * K < N; i++) { if (qu.size() <= 1 || qu[qu.size()-1] < qu[qu.size()-2]) { qu.push_back(qu.back() + i * K); } else { qu.push_back(qu.back() - i * K); } } // Stick to left int diff = 1 - qu.back(); if (qu.back() > 0) { // Last move was forward, stick to right diff = N - qu.back(); } for (int i = 0; i < qu.size(); i++) qu[i] += diff; for (int i = 0; i < qu.size(); i++) { int res = query(qu[i]); if (i > 0 && res) { int low = 0; int cur = qu[i]; int par = cur > qu[0]; if (i >= 2) low = abs(qu[i-1] - qu[i-2]); for (int j = abs(qu[i] - qu[i-1]) - 1; j > low; j--) { if (par) { cur -= j; } else { cur += j; } par = !par; if (!query(cur)) { answer(j+1); } } answer(low+1); } } // Should either be at N or 1 { int cur = qu.back(); int par = cur <= qu[0]; for (int j = N-1; j > ((N-1) / K) * K; j--) { if (par) { cur += j; } else { cur -= j; } par = !par; if (!query(cur)) { answer(j+1); } } answer(((N-1) / K) * K + 1); } }

Compilation message (stderr)

Colors.cpp: In function 'int main()':
Colors.cpp:57:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   57 |  for (int i = 0; i < qu.size(); i++) qu[i] += diff;
      |                  ~~^~~~~~~~~~~
Colors.cpp:58:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   58 |  for (int i = 0; i < qu.size(); i++) {
      |                  ~~^~~~~~~~~~~
Colors.cpp: In function 'int query(int)':
Colors.cpp:25:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   25 |  scanf("%d", &res);
      |  ~~~~~^~~~~~~~~~~~
Colors.cpp: In function 'int main()':
Colors.cpp:38:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   38 |  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...