Submission #876515

#TimeUsernameProblemLanguageResultExecution timeMemory
876515n3rm1n동굴 (IOI13_cave)C++17
Compilation error
0 ms0 KiB
#include<bits/stdc++.h>
#include "cave.h"
#define endl '\n'
using namespace std;
const int MAXN = 5005;

 /* #define MAX_N 5000
  #define MAX_CALLS 70000

  #define fail(s, x   ) do { \
  		fprintf(stderr, s "\n", ## x); \
  		exit(1); \
  	} while(0)

   
  #define N koala
  #define realS kangaroo
  #define realD possum
  #define inv platypus
  #define num_calls echidna

  static int N;
  static int realS[MAX_N];
  static int realD[MAX_N];
  static int inv[MAX_N];
  static int num_calls;

  void answer(int S[], int D[]) {
      int i;
      int correct = 1;
      for (i = 0; i < N; ++i)
          if (S[i] != realS[i] || D[i] != realD[i]) {
              correct = 0;
              break;
          }

      if (correct)
          printf("CORRECT\n");
      else
          printf("INCORRECT\n");

      for (i = 0; i < N; ++i) {
          if (i > 0)
              printf(" ");
          printf("%d", S[i]);
      }
      printf("\n");

      for (i = 0; i < N; ++i) {
          if (i > 0)
              printf(" ");
          printf("%d", D[i]);
      }
      printf("\n");

      exit(0);
  }
  int n;
  int tryCombination(int S[]) {
      int i;

      if (num_calls >= MAX_CALLS) {
          printf("INCORRECT\nToo many calls to tryCombination() \n");
          exit(0);
      }
      for(int i = 0;i < n;++i){
      	cout << S[i] << ' ';
      }
      cout << '\n';
      ++num_calls;

      for (i = 0; i < N; ++i)
          if (S[inv[i]] != realS[inv[i]])
              return i;
      return -1;
  }

  /*int init() {
      int i, res;

      FILE *f = fopen("cave in", "r");
  	if (!f)
  		fail("Failed to open input file ");

  	res = fscanf(f, "%d", &N);

      for (i = 0; i < N; ++i) {
          res = fscanf(f, "%d", &realS[i]);
    }
     for (i = 0; i < N; ++i) {
         res = fscanf(f, "%d", &realD[i]);
        inv[realD[i]] = i;
    }

     num_calls = 0;
     return N;
 }*/
int taken[MAXN], correct[MAXN], connected_to[MAXN];
int curr_try[MAXN];
void help_try_01(int mid)
{
    for (int i = 0; i < mid; ++ i)
        curr_try[i] = 0;
    for (int i = mid; i < n; ++ i)
        curr_try[i] = 1;
    for (int i = 0; i < n; ++ i)
    {
        if(taken[i])curr_try[i] = correct[i];
    }
}
void help_try_10(int mid)
{
    for (int i = 0; i < mid; ++ i)
        curr_try[i] = 1;
    for (int i = mid; i < n; ++ i)
        curr_try[i] = 0;
    for (int i = 0; i < n; ++ i)
    {
        if(taken[i])curr_try[i] = correct[i];
    }
}
void exploreCave(int N)
{
    n = N;
    for (int door = 0; door < n; ++ door)
    {
        if(tryCombination(correct) > door || tryCombination(correct) == -1)
        {
            int l = 0, r = n-1, mid, ans = -1;
            while(l <= r)
            {
                mid = (l + r)/2;
                help_try_01(mid);
                int res = tryCombination(curr_try);
                if(res >= door || res == -1)
                {
                    ans = mid;
                    r = mid - 1;
                }
                else l = mid + 1;
            }
            taken[ans] = 1;
            correct[ans] = 0;
            connected_to[ans] = door;
        }
        else
        {
            int l = 0, r = n-1, mid, ans = -1;
            while(l <= r)
            {
                mid = (l + r)/2;
                help_try_10(mid);
                int res = tryCombination(curr_try);
                if(res >= door || res == -1)
                {
                    ans = mid;
                    r = mid - 1;
                }
                else l = mid + 1;
            }
            taken[ans] = 1;
            correct[ans] = 1;
            connected_to[ans] = door;
        }
    }
    answer(correct, connected_to);
}
  /*int main()
  {
  	cin >> n;
  	for(int i = 0;i < n;++i){
  		cin >> realS[i];
  	}
  	for(int i = 0;i < n;++i){
  		cin >> realD[i];
  	}
  	exploreCave(n);
  }*/
/***
4
1 1 0 0
3 1 2 0
*/

Compilation message (stderr)

cave.cpp:78:3: warning: "/*" within comment [-Wcomment]
   78 |   /*int init() {
      |    
cave.cpp: In function 'void help_try_01(int)':
cave.cpp:104:27: error: 'n' was not declared in this scope
  104 |     for (int i = mid; i < n; ++ i)
      |                           ^
cave.cpp:106:25: error: 'n' was not declared in this scope
  106 |     for (int i = 0; i < n; ++ i)
      |                         ^
cave.cpp: In function 'void help_try_10(int)':
cave.cpp:115:27: error: 'n' was not declared in this scope
  115 |     for (int i = mid; i < n; ++ i)
      |                           ^
cave.cpp:117:25: error: 'n' was not declared in this scope
  117 |     for (int i = 0; i < n; ++ i)
      |                         ^
cave.cpp: In function 'void exploreCave(int)':
cave.cpp:124:5: error: 'n' was not declared in this scope
  124 |     n = N;
      |     ^
cave.cpp:132:17: error: 'mid' was not declared in this scope
  132 |                 mid = (l + r)/2;
      |                 ^~~
cave.cpp:137:21: error: 'ans' was not declared in this scope; did you mean 'abs'?
  137 |                     ans = mid;
      |                     ^~~
      |                     abs
cave.cpp:142:19: error: 'ans' was not declared in this scope; did you mean 'abs'?
  142 |             taken[ans] = 1;
      |                   ^~~
      |                   abs
cave.cpp:151:17: error: 'mid' was not declared in this scope
  151 |                 mid = (l + r)/2;
      |                 ^~~
cave.cpp:156:21: error: 'ans' was not declared in this scope; did you mean 'abs'?
  156 |                     ans = mid;
      |                     ^~~
      |                     abs
cave.cpp:161:19: error: 'ans' was not declared in this scope; did you mean 'abs'?
  161 |             taken[ans] = 1;
      |                   ^~~
      |                   abs