# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1063723 | pawned | Gondola (IOI14_gondola) | C++17 | 18 ms | 5972 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#pragma GCC optimize("O1,O2,O3,Ofast,unroll-loops")
#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
typedef long long ll;
typedef pair<ll, ll> ii;
typedef vector<ll> vi;
#include "gondola.h"
int valid(int N, int inputSeq[]) {
vi a;
for (int i = 0; i < N; i++) {
a.pb(inputSeq[i] - 1);
}
int fpos = -1; // fixed position
int fval = -1; // fixed val at position
for (int i = 0; i < N; i++) {
if (a[i] < N) {
fpos = i;
fval = a[i];
}
}
vi b;
if (fval > fpos) {
int s = fval - fpos;
for (int i = N - s; i < N; i++) {
b.pb(a[i]);
}
for (int i = 0; i < N - s; i++) {
b.pb(a[i]);
}
}
else {
int s = fpos - fval;
for (int i = s; i < N; i++) {
b.pb(a[i]);
}
for (int i = 0; i < s; i++) {
b.pb(a[i]);
}
}
for (int i = 0; i < N; i++) {
if (b[i] < N) {
if (b[i] != i)
return 0;
}
}
// all values must be diff
set<int> allv;
for (int x : b)
allv.insert(x);
if (allv.size() != N)
return 0;
return 1;
}
int replacement(int N, int gondolaSeq[], int replacementSeq[]) {
vi a;
for (int i = 0; i < N; i++) {
a.pb(gondolaSeq[i] - 1);
}
int fpos = -1; // fixed position
int fval = -1; // fixed val at position
for (int i = 0; i < N; i++) {
if (a[i] < N) {
fpos = i;
fval = a[i];
}
}
vi b;
if (fpos == -1) {
b = a;
}
else if (fval > fpos) {
int s = fval - fpos;
for (int i = N - s; i < N; i++) {
b.pb(a[i]);
}
for (int i = 0; i < N - s; i++) {
b.pb(a[i]);
}
}
else {
int s = fpos - fval;
for (int i = s; i < N; i++) {
b.pb(a[i]);
}
for (int i = 0; i < s; i++) {
b.pb(a[i]);
}
}
/* cout<<"b: ";
for (int x : b)
cout<<x<<" ";
cout<<endl;*/
// replace 0, 1, ..., N - 1 with b
vector<ii> rep;
for (int i = 0; i < N; i++) {
if (b[i] != i)
rep.pb({b[i], i});
}
sort(rep.begin(), rep.end());
/* cout<<"rep: ";
for (ii p : rep)
cout<<"("<<p.fi<<", "<<p.se<<"); ";
cout<<endl;*/
if (rep.size() == 0) { // just 0 to N - 1
return 0;
}
int curr = N - 1;
vi ans;
for (int i = 0; i < rep.size(); i++) {
ans.pb(rep[i].se);
for (int j = curr + 1; j < rep[i].fi; j++) {
ans.pb(j);
}
curr = rep[i].fi;
}
int K = ans.size();
for (int i = 0; i < K; i++) {
replacementSeq[i] = ans[i] + 1;
}
return K;
}
int countReplacement(int N, int inputSeq[]) {
return -3;
}
// subtasks 1, 2, 3: check validity
컴파일 시 표준 에러 (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... |