Submission #1198052

#TimeUsernameProblemLanguageResultExecution timeMemory
1198052njoopGondola (IOI14_gondola)C++20
25 / 100
10 ms1220 KiB
#include "gondola.h"
#include <bits/stdc++.h>

using namespace std;

int valid(int n, int inputSeq[]) {
  int st=0, mn=1e9;
  vector<int> v;
  for(int i=0; i<n; i++) {
    v.push_back(inputSeq[i]);
    if(inputSeq[i] <= n && inputSeq[i] < mn) {
      mn = inputSeq[i];
      st = i;
    }
  }
  sort(v.begin(), v.end());
  for(int i=1; i<n; i++) {
    if(v[i] == v[i-1]) return 0;
  }
  if(mn == 1e9) return 1;
  for(int i=st; i<n; i++) {
    if(inputSeq[i] <= n && inputSeq[i] != mn) return 0;
    mn++;
  }
  for(int i=0; i<st; i++) {
    if(inputSeq[i] <= n && inputSeq[i] != mn) return 0;
    mn++;
  }
  return 1;
}

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

int replacement(int n, int gondolaSeq[], int replacementSeq[]) {
  int oriSeq[n], pos=1, val=1, idx=0;
  priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
  priority_queue<int> avai;
  map<int, int> mp;
  for(int i=0; i<n; i++) {
    if(gondolaSeq[i] <= n) {
      pos = i;
      val = gondolaSeq[i];
    } else {
      pq.push({gondolaSeq[i], i});
      avai.push(i);
    }
  }
  for(int i=pos; i<n; i++) {
    oriSeq[i] = val;
    val++;
    if(val > n) val -= n;
  }
  for(int i=0; i<pos; i++) {
    oriSeq[i] = val;
    val++;
    if(val > n) val -= n;
  }
  for(int i=n+1; pq.size(); i++) {
    if(i == pq.top().first) {
      replacementSeq[idx] = oriSeq[pq.top().second];
      oriSeq[pq.top().second] = i;
      pq.pop();
      mp[i] = 1;
      idx++;
    } else {
      while(avai.size() && mp[avai.top()]) avai.pop();
      if(avai.empty()) return idx;
      replacementSeq[idx] = oriSeq[avai.top()];
      oriSeq[avai.top()] = i;
      idx++;
    }
  }
  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...