# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1250822 | hmms127 | 곤돌라 (IOI14_gondola) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
#include "gondola.h"
#define pb push_back
using namespace std;
int valid(int n, int a[])
{
int idx;
for(int i=0;i<n;i++){
if(a[i]==1){idx=i;break;}
}
int sm=0;
for(int i=idx;i<n;i++)sm+=a[i];
int sz=n-idx;
return (sm==sz*(sz+1)/2);
}
//----------------------
int replacement(int n, int a[], int replacementSeq[])
{
vector<array<int,2>>v;
int f=0;
for(int i=0;i<n;i++){
if(a[i]<=n){
p=i-(a[i]-1);
p+=(p<0 ? n:0);
}
}
for(int i=0;i<n;i++){
if(a[i]>n)v.pb({a[i],i});
}
sort(v.begin(),v.end());
int cnt=0,idx=0,cur_val=n;
for(auto it:v){
int x=it[1]-f+1;
x+=(x<0 ? n:0);
replacementSeq[idx++]=x;
cur_val++;
while(cur_val<it[0]){
replacementSeq[idx++]=cur_val++;
cnt++;
}
}
return cnt;
}
//----------------------
int countReplacement(int n, int a[])
{
int cnt=0,mx=0;
for(int i=0;i<n;i++){
cnt+=(a[i]>n);
mx=max(mx,a[i]);
}
return (cnt==3 ? 1:(cnt==2&&mx==n+3 ? 2:1));
}