Submission #1124505

#TimeUsernameProblemLanguageResultExecution timeMemory
1124505SalihSahinGondola (IOI14_gondola)C++20
55 / 100
40 ms4936 KiB
#include <bits/stdc++.h>
#define pb push_back
using namespace std;
#include "gondola.h"

int valid(int n, int inputSeq[]){
  int ind = -1;
  for(int i = 0; i < n; i++){
    if(inputSeq[i] <= n) ind = i;
  }
  if(ind == -1){
      bool ok = 1;
      map<int, int> vis;
      for(int i = 0; i < n; i++){
        if(vis[inputSeq[i]]) ok = 0;
        vis[inputSeq[i]] = 1;
      }
      return ok;
  }

  vector<int> alternate(n);
  for(int i = ind; i < n; i++){
    alternate[i] = inputSeq[ind] + (i - ind);
    if(alternate[i] > n) alternate[i] -= n;
  }
  for(int i = 0; i < ind; i++){
    alternate[i] = alternate[n-1] + i + 1;
    if(alternate[i] > n) alternate[i] -= n;
  }

  bool ok = 1;
  map<int, int> vis;
  for(int i = 0; i < n; i++){
    if(vis[inputSeq[i]]) ok = 0;
    vis[inputSeq[i]] = 1;

    if(inputSeq[i] > n || inputSeq[i] == alternate[i]) continue;
    ok = 0;
  }

  return ok;
}

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

int replacement(int n, int gondolaSeq[], int replacementSeq[]){
  int l, mx = 0;
  int ind = -1;
  for(int i = 0; i < n; i++){
    mx = max(mx, gondolaSeq[i]);
    if(gondolaSeq[i] <= n) ind = i;
  }
  l = (mx - n);
  vector<int> alternate(n);
  if(ind == -1){
    for(int i = 0; i < n; i++){
        alternate[i] = i+1;
    }
  }
  else{
    for(int i = ind; i < n; i++){
      alternate[i] = gondolaSeq[ind] + (i - ind);
      if(alternate[i] > n) alternate[i] -= n;
    }
    for(int i = 0; i < ind; i++){
      alternate[i] = alternate[n-1] + i + 1;
      if(alternate[i] > n) alternate[i] -= n;
    }
  }

  vector<pair<int, int> > rep;
  for(int i = 0; i < n; i++){
    if(gondolaSeq[i] <= n) continue;
    rep.pb({gondolaSeq[i], i});
  }
  sort(rep.begin(), rep.end());
  int now = n + 1;
  ind = 0;
  for(auto itr: rep){
    while(itr.first >= now){
        replacementSeq[ind++] = alternate[itr.second];
        alternate[itr.second] = now;
        now++;
    }
  }

  return l;
}

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

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