Submission #718206

#TimeUsernameProblemLanguageResultExecution timeMemory
718206thimote75곤돌라 (IOI14_gondola)C++14
55 / 100
36 ms4580 KiB
#include "gondola.h"
#include <bits/stdc++.h>

using namespace std;

int valid(int n, int inputSeq[])
{
  set<int> omega;
  for (int i = 0; i < n; i ++) omega.insert(inputSeq[i]);
  if (omega.size() != n) return 0;

  int jStart = -1;
  for (int i = 0; i < n; i ++) {
    if (inputSeq[i] > n) continue ;

    jStart = i; 
    break;
  }

  if (jStart == -1) return 1;

  int start = jStart - inputSeq[jStart] + 1;
  if (start < 0) start += n;

  for (int mu = 0; mu < n; mu ++) {
    int nu = (start + mu);
    if (nu >= n) nu -= n;

    if (inputSeq[nu] > n) continue ;
    if (inputSeq[nu] != mu + 1)
      return 0;
  }

  return 1;
}

//----------------------

int replacement(int n, int gondolaSeq[], int replacementSeq[])
{
  int maxValue = 0;
  int maxPos   = -1;

  int jStart = -1;
  for (int i = 0; i < n; i ++) {
    if (gondolaSeq[i] > maxValue) {
      maxValue = gondolaSeq[i];
      maxPos   = i;
    }

    if (gondolaSeq[i] <= n) {
      jStart = i;
    }
  }

  int start = 0;
  if (jStart != -1) {
    start = jStart - gondolaSeq[jStart] + 1;
    if (start < 0) start += n;
  }
  
  int length = maxValue - n;

  for (int i = 0; i < length; i ++) {
    replacementSeq[i] = -1;
  }

  for (int i = 0; i < n; i ++) {
    if (gondolaSeq[i] > n && gondolaSeq[i] != maxValue) {
      replacementSeq[gondolaSeq[i] - n - 1] = (n + i - start) % n + 1;
    }
  }

  int last = (n + maxPos - start) % n + 1;
  for (int i = 0; i < length; i ++) {
    int value = i + n + 1;
    if (replacementSeq[i] != -1) continue ;

    replacementSeq[i] = last;
    last = value;
  }

  return length;
}

//----------------------

int countReplacement(int n, int inputSeq[])
{
  return -3;
}

Compilation message (stderr)

gondola.cpp: In function 'int valid(int, int*)':
gondola.cpp:10:20: warning: comparison of integer expressions of different signedness: 'std::set<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   10 |   if (omega.size() != n) return 0;
      |       ~~~~~~~~~~~~~^~~~
#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...
#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...