Submission #1304156

#TimeUsernameProblemLanguageResultExecution timeMemory
1304156the_commando_xGondola (IOI14_gondola)C++17
25 / 100
31 ms4724 KiB
#include "gondola.h"

#include <bits/stdc++.h>
using namespace std;

int valid(int n, int inputSeq[])
{
  set<int> seen;
  for (int i = 0; i < n; ++i)
    if (seen.count(inputSeq[i]))
      return 0;
    else
      seen.insert(inputSeq[i]);

  int start = -1;
  for (int i = 0; i < n; ++i)
    if (inputSeq[i] <= n)
    {
      start = i;
      break;
    }

  if (start != -1)
  {
    int base = inputSeq[start];
    for (int i = 0; i < n; ++i)
    {
      int expected = (base + i - start) % n;
      if (expected <= 0)
        expected += n;

      if (inputSeq[i] <= n && inputSeq[i] != expected)
        return 0;
    }
  }

  int nextReplacement = n + 1;
  for (int i = 0; i < n; ++i)
    if (inputSeq[i] > n)
      if (inputSeq[i] < nextReplacement)
        return 0;
      else
        nextReplacement = inputSeq[i] + 1;

  return 1;
}

int replacement(int n, int gondolaSeq[], int replacementSeq[])
{
  int start = -1;
  for (int i = 0; i < n; i++)
  {
    if (gondolaSeq[i] <= n)
    {
      start = i;
      break;
    }
  }

  int M = 0;
  for (int i = 0; i < n; ++i)
    M = max(M, gondolaSeq[i]);

  int totalBreaks = M - n;

  if (start == -1)
  {
    int idx = 0;
    for (int x = 1; x <= totalBreaks; ++x)
      replacementSeq[idx++] = x;
    return idx;
  }

  int idx = 0, base = gondolaSeq[start];

  map<int, int> brokenAt; // {replacement number, gondola number}

  for (int i = 0; i < n; ++i)
  {
    int expected = (base + i - start) % n;
    if (expected <= 0)
      expected += n;

    if (gondolaSeq[i] > n)
      brokenAt[gondolaSeq[i]] = expected;
  }

  int nextReplacement = n + 1;

  for (auto &[rep, broken] : brokenAt)
  {
    while (nextReplacement < rep)
      replacementSeq[idx++] = nextReplacement++;

    replacementSeq[idx++] = broken;
    ++nextReplacement;
  }

  while (idx < totalBreaks)
    replacementSeq[idx++] = nextReplacement++;

  return idx;
}

int countReplacement(int n, int inputSeq[])
{
  return -3;
}
#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...