# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1215513 | mayac | Gondola (IOI14_gondola) | C++20 | 0 ms | 0 KiB |
#include <iostream>
#include <vector>
#include <queue>
#include <set>
using namespace std;
bool valid(int n, vector<int> v) {
for (int i = 0; i < n; i++) {
//cout << i << " ";
if (v[i] - 1 != (v[0] - 1 + i) % n)return 0;
}
return 1;
}
int valid(int n, int v[]) {
for (int i = 0; i < n; i++) {
//cout << i << " ";
if (v[i] - 1 != (v[0] - 1 + i) % n)return 0;
}
return 1;
}
int replacement(int n, int tmp[], int ans[]) {
int l=0,t=-1;
priority_queue < pair<int, int>> pq;
set<int> s;
for (int i = 0; i < n; i++) {
l = max(l, tmp[i]);
s.insert(i);
if (tmp[i] <= n)t = i;
else {
pq.push({ -tmp[i],i });
}
}
vector<int> v(n);
l -= n;
if (t == -1) {
for (int i = 0; i < n; i++)v[i] = i + 1;
}
else {
for (int i = 0; i < n; i++)v[i + t] = ((v[t] - 1 + i) % n) + 1;
}
for (int i = 0; i < l; i++) {
int m = -pq.top().first, ind = pq.top().second;
if (m == i + n + 1) {
pq.pop();
s.erase(ind);
ans[i] = v[ind];
}
else {
ind = *(s.begin());
ans[i] = v[ind];
v[ind] = n + i + 1;
}
}
return l;
}
int countReplacement(int n, int inputSeq[]) {
return 0;
}