# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
818175 | andecaandeci | Gondola (IOI14_gondola) | C++17 | 15 ms | 2292 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#include "gondola.h"
using namespace std;
bool vis[250005];
int valid(int n, int inputSeq[])
{
bool drop = 0;
int cur = -1;
for (int i = 0; i < n; i++) {
if (cur != -1) cur = (cur%n)+1;
if (vis[inputSeq[i]]) return 0;
vis[inputSeq[i]] = 1;
if (inputSeq[i] > n) continue;
// if (last > inputSeq[i] and drop) return 0;
// if (last > inputSeq[i]) drop = 1;
// last = inputSeq[i];
// cout << cur << endl;
if (cur == -1) cur = inputSeq[i];
else if (cur != inputSeq[i]) return 0;
}
return 1;
}
//----------------------
vector<pair<int, int>> dif;
int replacement(int n, int gondolaSeq[], int replacementSeq[])
{
// int mx = 0;
// for (int i = 0; i < n; i++) {
// mx = max(mx, gondolaSeq[i]);
// vis[gondolaSeq[i]] = 1;
// }
// int counter = 0;
// for (int i = 1; i <= mx; i++) {
// if (vis[i]) continue;
// replacementSeq[counter] = i;
// counter++;
// }
// mx -= n;
// return mx;
int landasan = -1;
int idx_landasan = -1;
for (int i = 0; i < n; i++) {
if (gondolaSeq[i] <= n) {
landasan = gondolaSeq[i];
idx_landasan = i;
break;
}
}
if (landasan == -1 and idx_landasan == -1) {
landasan = 1;
idx_landasan = 0;
}
// cout << "landasan : " << idx_landasan << " " << landasan << endl;
int curi, curdasar = landasan-1;
for (int i = idx_landasan; i < n+idx_landasan; i++) {
curi = (i%n);
curdasar = (curdasar%n)+1;
if (gondolaSeq[curi] <= n) continue;
dif.push_back({gondolaSeq[curi], curdasar});
// cout << curi << " " << curdasar << " " << endl;
}
sort(dif.begin(), dif.end());
// cout << "------" << endl;
// for (auto i: dif) {
// cout << i.first << " " << i.second << endl;
// }
int cur = n+1, idx = 0, counter = 0;
for (int i = 0; i < dif.size(); i++) {
while (dif[i].second != dif[i].first) {
replacementSeq[idx] = dif[i].second;
dif[i].second = cur;
cur++;
idx++;
counter++;
// cout << dif[i].first << " " << dif[i].second << endl;
}
}
for (auto i: dif) {
while (i.second != i.first) {
replacementSeq[idx] = i.second;
i.second = cur;
cur++;
idx++;
counter++;
}
}
// cout << endl;
return counter;
}
//----------------------
int countReplacement(int n, int inputSeq[])
{
return -3;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |