Submission #39829

# Submission time Handle Problem Language Result Execution time Memory
39829 2018-01-20T12:09:21 Z cheater2k Highway design (CEOI12_highway) C++14
100 / 100
2 ms 3264 KB
#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

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 time Memory Grader output
1 Correct 0 ms 2412 KB Output is correct - 22 queries, 4 points
2 Correct 0 ms 2412 KB Output is correct - 12 queries, 4 points
3 Correct 0 ms 2412 KB Output is correct - 158 queries, 4 points
4 Correct 0 ms 2412 KB Output is correct - 202 queries, 4 points
5 Correct 0 ms 2412 KB Output is correct - 253 queries, 4 points
6 Correct 0 ms 2412 KB Output is correct - 303 queries, 4 points
7 Correct 0 ms 2412 KB Output is correct - 352 queries, 4 points
8 Correct 0 ms 2412 KB Output is correct - 402 queries, 4 points
9 Correct 0 ms 2412 KB Output is correct - 452 queries, 4 points
10 Correct 0 ms 2412 KB Output is correct - 502 queries, 4 points
11 Correct 0 ms 2412 KB Output is correct - 1003 queries, 4 points
12 Correct 0 ms 2412 KB Output is correct - 1003 queries, 4 points
13 Correct 0 ms 2412 KB Output is correct - 1504 queries, 4 points
14 Correct 0 ms 2412 KB Output is correct - 2004 queries, 4 points
15 Correct 0 ms 2552 KB Output is correct - 2505 queries, 4 points
16 Correct 0 ms 2412 KB Output is correct - 805 queries, 4 points
17 Correct 0 ms 2412 KB Output is correct - 856 queries, 4 points
18 Correct 0 ms 2412 KB Output is correct - 902 queries, 4 points
19 Correct 1 ms 2684 KB Output is correct - 12707 queries, 4 points
20 Correct 1 ms 2684 KB Output is correct - 15002 queries, 4 points
21 Correct 1 ms 2880 KB Output is correct - 20062 queries, 4 points
22 Correct 1 ms 2880 KB Output is correct - 28063 queries, 4 points
23 Correct 2 ms 3264 KB Output is correct - 33890 queries, 4 points
24 Correct 2 ms 3264 KB Output is correct - 40946 queries, 4 points
25 Correct 2 ms 3264 KB Output is correct - 50001 queries, 4 points