Submission #39829

#TimeUsernameProblemLanguageResultExecution timeMemory
39829cheater2kHighway design (CEOI12_highway)C++14
100 / 100
2 ms3264 KiB
#include <bits/stdc++.h>
#include "office.h"
using namespace std;

int n, a, b, c;

int query(int x, int y, int z) {
  return isOnLine(x + 1, y + 1, z + 1);
}

void brute() {
  for (a = 0; a < 5; ++a) {
    for (b = a + 1; b < 5; ++b) {
      for (c = b + 1; c < 5; ++c) {
        if (!query(a, b, c)) continue;
        int x = 0;
        while(x == a || x == b || x == c) ++x;
        int y = 10 - a - b - x;
        Answer(a + 1, b + 1, x + 1, y + 1);
      }
    }
  }
}

void solve() {
  vector<int> line;
  vector<int> rem;
  for (int i = 0; i < n; ++i) if (i != a && i != b && i != c) rem.push_back(i);

  for (int i = 0; i < rem.size(); i += 2) {
    if (line.size() >= 2) break;
    int x = rem[i], y = (i == rem.size() - 1) ? b : rem[i + 1];
    if (query(a, x, y)) continue;

    if (!query(a, b, x)) {
      line.push_back(x);
    } else {
      line.push_back(y);
    }
  }

  assert(line.size() >= 2);
  Answer(a + 1, b + 1, line[0] + 1, line[1] + 1);
}

int main() {
  n = GetN();
  a = -1, b = -1, c = -1;

  int p = query(0, 1, 2);
  if (p) {
    a = 0; b = 1; c = 2; solve();
  }
  
  int q = query(2, 3, 4);
  if (q) {
    a = 2; b = 3; c = 4; solve();
  }
  
  brute();
}

Compilation message (stderr)

highway.cpp: In function 'void solve()':
highway.cpp:30:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int i = 0; i < rem.size(); i += 2) {
                     ^
highway.cpp:32:28: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     int x = rem[i], y = (i == rem.size() - 1) ? b : rem[i + 1];
                            ^
office.c: In function 'int isOnLine(int, int, int)':
office.c:85:29: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
     _Fin(0, "Protocol error");
                             ^
office.c:88:29: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
     _Fin(0, "Protocol error");
                             ^
office.c:92:37: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
     _Fin(false, "Too many questions");
                                     ^
office.c:83:7: warning: unused variable 'i' [-Wunused-variable]
   int i;
       ^
office.c: In function 'void Answer(int, int, int, int)':
office.c:123:29: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
     _Fin(0, "Protocol error");
                             ^
office.c:128:44: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
       if( (-_Apa[na1]==_N-3) && (na2!=na1) && (nb2!=na1) ||
                                            ^
office.c:130:30: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
          _Fin(true, "Correct");
                              ^
office.c:132:36: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
          _Fin(false, "Wrong answer");
                                    ^
office.c:134:44: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
       if( (-_Apa[na2]==_N-3) && (na1!=na2) && (nb1!=na2) ||
                                            ^
office.c:136:30: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
          _Fin(true, "Correct");
                              ^
office.c:138:36: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
          _Fin(false, "Wrong answer");
                                    ^
office.c:140:33: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
       _Fin(false, "Wrong answer");
                                 ^
office.c:142:23: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
   _Fin(true, "Correct");
                       ^
office.c:120:27: warning: unused variable 'pont' [-Wunused-variable]
   int na1, nb1, na2, nb2, pont;
                           ^
office.c: In function 'void _doInit()':
office.c:33:21: 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...