# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
818175 | andecaandeci | 곤돌라 (IOI14_gondola) | C++17 | 15 ms | 2292 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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;
}
컴파일 시 표준 에러 (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... |