제출 #1344439

#제출 시각아이디문제언어결과실행 시간메모리
1344439nathlol2곤돌라 (IOI14_gondola)C++20
20 / 100
30 ms4740 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);
  vector<pair<int, int>> p;
  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;
      }
      break;
    }else{
      p.push_back({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]--;
    og[i] %= n;
    og[i]++;
  }
  int cur = n + 1;
  sort(p.begin(), p.end());
  for(int i = 0;i<p.size();i++){
    auto [d, id] = p[i];
    r[l++] = og[id];
    while(cur < d){
      r[l++] = cur;
      ++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...