Submission #50737

#TimeUsernameProblemLanguageResultExecution timeMemory
50737Talant곤돌라 (IOI14_gondola)C++17
55 / 100
23 ms2696 KiB
#include "gondola.h"

#include <bits/stdc++.h>

#define mk make_pair
#define pb push_back
#define fr first
#define sc second

using namespace std;

const int N = 2e6 + 5;

int u[N],mx;
int id;
int mn = 1e9 + 7;

vector <pair<int,int> > v;

int valid(int n, int inputSeq[])
{
      for (int i = 0; i < n; i ++) {
            if (inputSeq[i] < mn)
                  mn = inputSeq[i],id = i;
            mx = max(mx,inputSeq[i]);
      }
      if (mx > n)
            return 0;
      int o = mn;
      for (int i = id - 1; i >= 0; i --) {
            mn --;
            if (mn == 0) mn = n;
            if (inputSeq[i] > n)
                  continue;
            if (mn != inputSeq[i])
                  return 0;
      }
      mn = o;
      for (int i = id + 1; i < n; i ++) {
            mn ++;
            if (mn == n + 1) mn = 1;
            if (inputSeq[i] > n)
                  continue;
            if (mn != inputSeq[i])
                  return 0;
      }
      return 1;
}

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

int replacement(int n, int gondolaSeq[], int replacementSeq[])
{
     for (int i = 0; i < n; i ++) {
            if (gondolaSeq[i] < mn)
                  mn = gondolaSeq[i],id = i;
      }
      if (mn > n) {
            int cn = 0;
            for (int i = 0; i < n; i ++)
                  v.pb(mk(gondolaSeq[i],++cn));
      }
      else {
            int o = mn;
            for (int i = id; i >= 0; i --) {
                  if (gondolaSeq[i] > n) {
                        v.pb(mk(gondolaSeq[i],mn));
                  }
                  mn --;
                  if (mn == 0)
                        mn = n;
            }
            mn = o;
            for (int i = id; i < n; i ++) {
                  if (gondolaSeq[i] > n) {
                        v.pb(mk(gondolaSeq[i],mn));
                  }
                  mn ++;
                  if (mn == n + 1)
                        mn = 1;
            }
      }
      sort (v.begin(),v.end());

      int last = n + 1;
      int cnt = 0;

      for (auto to : v) {
            replacementSeq[cnt ++] = to.sc;
            for (int i = last; i < to.fr; i ++) {
                  replacementSeq[cnt ++] = i;
            }
            last = to.fr + 1;
      }
      return (cnt);

}

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

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...