Submission #1344426

#TimeUsernameProblemLanguageResultExecution timeMemory
1344426nathlol2Gondola (IOI14_gondola)C++20
25 / 100
28 ms4720 KiB
#include "gondola.h"
#include <bits/stdc++.h>
using namespace std;

int valid(int n, int a[]){
  int mn = INT_MAX, p;
  set<int> s;
  for(int i = 0;i<n;i++){
    if(s.find(a[i]) != s.end()) return 0;
    s.insert(a[i]);
    if(a[i] < mn){
      mn = a[i];
      p = i;
    }
  }
  if(mn > n) return 1;
  for(int i = 0;i<n;i++){
    int pos = (i + p) % n;
    if(a[pos] <= n && a[pos] != mn + i) return 0;
  }
  return 1;
}

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

int replacement(int n, int a[], int r[]){
  int l = 0;
  vector<int> og(n, -1);
  priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
  for(int i = 0;i<n;i++){
    if(a[i] <= n){
      og[i] = a[i];
      for(int j = i + 1;j<n;j++) og[j] = og[j - 1] + 1;
      if(og[0] == -1){
        og[0] = og[n - 1] + 1;
        for(int j = 1;j<i;j++) og[j] = og[j - 1] + 1;
      }
    }else{
      pq.push({a[i], i});
    }
  }
  if(og[0] == -1){
    for(int i = 0;i<n;i++) og[i] = i + 1;
  }
  for(int i = 0;i<n;i++) og[i] %= n;
  int cur = n + 1;
  while(!pq.empty()){
    auto [d, i] = pq.top();
    pq.pop();
    r[l++] = og[i];
    while(cur < d){
      r[l++] = cur;
      ++cur;
    }
  }
  return l;
}

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

int countReplacement(int n, int a[]){
  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...