Submission #855234

# Submission time Handle Problem Language Result Execution time Memory
855234 2023-10-01T01:46:43 Z NeroZein Xylophone (JOI18_xylophone) C++17
0 / 100
0 ms 344 KB
#include "xylophone.h"
#include "bits/stdc++.h"

using namespace std; 

static int A[5001];
static bool Used[5001];

void solve(int N) {
  int l = 1, r = N - 1;
  while (l < r) {
    int mid = (l + r + 1) >> 1;
    if (query(mid, N) == N - 1) {
      l = mid;
    } else {
      r = mid - 1; 
    }
  }
  A[l] = 1;
  A[l + 1] = query(l, l + 1) + 1; 
  Used[A[l]] = Used[A[l + 1]] = true; 
  for (int i = l + 2; i <= N; ++i) {
    int diff = query(i - 1, i); 
    bool pre = A[i - 1] - diff > 1 && !Used[A[i - 1] - diff]; 
    bool aft = A[i - 1] + diff <= N && !Used[A[i - 1] + diff];
    if (pre && aft) {
      int diff2 = query(i - 2, i); 
      if (A[i - 2] < A[i - 1]) {
        if (diff2 == A[i - 1] - A[i - 2] + diff) {
          A[i] = A[i - 1] + diff; 
        } else {
          A[i] = A[i - 1] - diff; 
        }
      } else {
        if (diff2 == A[i - 2] - A[i - 1] + diff) {
          A[i] = A[i - 1] - diff; 
        } else {
          A[i] = A[i - 1] + diff; 
        }
      }
    } else if (pre) {
      A[i] = A[i - 1] - diff; 
    } else {
      A[i] = A[i - 1] + diff; 
    }
    Used[A[i]] = true; 
  }
  if (l > 1) {
    A[l - 1] = query(l - 1, l) + 1; 
    Used[A[l - 1]] = true; 
    for (int i = l - 2; i > 0; --i) {
      int diff = query(i, i + 1); 
      bool pre = A[i + 1] - diff > 1 && !Used[A[i + 1] - diff]; 
      bool aft = A[i + 1] + diff <= N && !Used[A[i + 1] + diff];
      if (pre && aft) {
        int diff2 = query(i, i + 2); 
        if (A[i + 2] < A[i + 1]) {
          if (diff2 == A[i + 1] - A[i + 2] + diff) {
            A[i] = A[i + 1] + diff; 
          } else {
            A[i] = A[i + 1] - diff; 
          }
        } else {
          if (diff2 == A[i + 2] - A[i + 1] + diff) {
            A[i] = A[i + 1] - diff; 
          } else {
            A[i] = A[i + 1] + diff; 
          }
        }
      } else if (pre) {
        A[i] = A[i + 1] - diff; 
      } else {
        A[i] = A[i + 1] + diff; 
      }
      Used[A[i]] = true; 
    }
  }
  for (int i = 1; i <= N; ++i) {
    cout << A[i] << ' ';
  }
  cout << '\n';
  for (int i = 1; i <= N; ++i) {
    answer(i, A[i]); 
  }
}
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 344 KB Unexpected end of file - int32 expected
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 344 KB Unexpected end of file - int32 expected
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 344 KB Unexpected end of file - int32 expected
2 Halted 0 ms 0 KB -