# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1135758 | Ak_16 | 곤돌라 (IOI14_gondola) | C++20 | 0 ms | 0 KiB |
#include <iostream>
#include <algorithm>
using namespace std;
int b[300005];
int cnt[300005];
int cha[300005];
bool cmp(int x, int y){
return b[x]<b[y];
}
int valid(int n, int a[]){
int cn=0;
int bruh=0;
int sp=0;
for(int i=0; i<n; i++){
cnt[a[i]]++; if(cnt[a[i]]>1){bruh=1;}
if(a[i]<=n){cn++; sp = i;}
}
if(bruh==1){return 0;}
if(cn>0){
for(int i=0; i<n; i++){
b[(2*n+a[sp]-sp+i-1)%n] = a[i];
}
}
else {
for(int i=0; i<n; i++){b[i] = a[i];}
}
if(cn==0){return 1;}
else {
int bru=0;
for(int i=0; i<n; i++){
if(b[i]<=n&&b[i]!=i+1){bru=1;}
}
return (1-bru);
}
}
int replacement(int n, int a[], int c[]){
int k = valid(n, a);
if(k==0){return 0;}
else {
int don=0;
int val=0;
for(int i=0; i<n; i++){
if(b[i]!=i+1){val++; cha[val] = i;}
}
sort(cha+1, cha+val+1, cmp);
int ok = n;
for(int i=1; i<=val; i++){
don++;
c[don-1] = cha[i]+1;
for(int j =1; j<= b[cha[i]]-ok-1; j++){
don++;
c[don-1] = ok+i;
}
ok = b[cha[i]];
}
return don;
}
}