답안 #99643

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
99643 2019-03-06T03:11:14 Z Retro3014 곤돌라 (IOI14_gondola) C++17
20 / 100
1000 ms 4728 KB
#include "gondola.h"
#include <bits/stdc++.h>

using namespace std;

const int MAX_X = 250000;

set<int> st;

int valid(int n, int inputSeq[]){
	int s = -1;
	for(int i=0; i<n; i++){
		if(st.find(inputSeq[i])!=st.end())	return false;
		st.insert(inputSeq[i]);
	}
	for(int i=0; i<n; i++){
		if(inputSeq[i]<=n){
			s = i; break;
		}
	}
	if(s==-1)	return 1;
	int idx = s, now = inputSeq[idx];
	bool tf = true;
	while(1){
		if(inputSeq[idx]<=n && inputSeq[idx]!=now){
			tf = false;
			break;
		}
		if(idx==(s+n-2)%n+1)	break;
		now = now%n+1; idx = (idx+1)%n;
	}
	if(tf)	return 1;
	tf = true;
	idx = s; now = inputSeq[idx];
	while(1){
		if(inputSeq[idx]<=n &&inputSeq[idx]!=now){
			tf = false;
			break;
		}
		if(idx==s%n+1)	break;
		idx = (idx+n-1)%n; now = (now+n-2)%n+1;
	}
	if(tf)	return 1;
	return 0;
}

//----------------------

int loc[MAX_X+1];
int num[MAX_X+1];

int replacement(int n, int gondolaSeq[], int replacementSeq[]){
	int mx = 0;
	for(int i=0; i<n; i++) mx = max(mx, gondolaSeq[i]);
	for(int i=1; i<=mx; i++)	loc[i] = -1;
	for(int i=0; i<n; i++)	loc[gondolaSeq[i]] = i;
	int s = -1;
	for(int i=0; i<n; i++){
		if(gondolaSeq[i]<=n){
			s = i; break;
		}
	}
	if(s==-1){
		for(int i=1; i<=n; i++){
			num[i] = i;
		}
	}
	else{
		bool tf = true;
		int idx = s, now = gondolaSeq[idx];
		while(1){
			if(gondolaSeq[idx]<=n && gondolaSeq[idx]!=now){
				tf = false; break;
			}
			idx = idx%n+1; now = now%n+1;
			if(idx==s)	break;
		}
		if(tf){
			idx = s; now = gondolaSeq[idx];
			while(1){
				num[idx] = now;
				idx = idx%n+1; now = now%n+1;
				if(idx==s)	break;
			}
		}else{
			idx = s; now = gondolaSeq[idx];
			while(1){
				num[idx] = now;
				idx = (idx+n-2)%n+1; now = (now+n-2)%n+1;
				if(idx==s)	break;
			}
		}
	}
	for(int i=0; i<n; i++){
		cout<<num[i]<<' ';
	}cout<<endl;
	int idx = 0;
	int cnt = 0;
	for(int i=n+1; i<=mx; i++){
		if(loc[i]!=-1){
			replacementSeq[cnt++] = num[loc[i]];
			num[loc[i]] = i;
		}else{
			while(gondolaSeq[idx]==num[idx])	idx++;
			replacementSeq[cnt++] = num[idx];
			num[idx] = i;
		}
	}
	return cnt+1;
}

//----------------------

int countReplacement(int n, int inputSeq[]){
	if(!valid(n, inputSeq))	return 0;

}

Compilation message

gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:117:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 384 KB Output is correct
2 Correct 3 ms 384 KB Output is correct
3 Correct 2 ms 384 KB Output is correct
4 Correct 2 ms 384 KB Output is correct
5 Correct 2 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 384 KB Output is correct
2 Correct 2 ms 384 KB Output is correct
3 Correct 2 ms 384 KB Output is correct
4 Correct 2 ms 384 KB Output is correct
5 Correct 2 ms 384 KB Output is correct
6 Correct 20 ms 2304 KB Output is correct
7 Correct 14 ms 640 KB Output is correct
8 Correct 42 ms 3960 KB Output is correct
9 Correct 10 ms 1536 KB Output is correct
10 Correct 42 ms 4728 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 384 KB Output is correct
2 Correct 2 ms 384 KB Output is correct
3 Correct 2 ms 384 KB Output is correct
4 Correct 2 ms 384 KB Output is correct
5 Correct 2 ms 356 KB Output is correct
6 Correct 18 ms 2304 KB Output is correct
7 Correct 13 ms 768 KB Output is correct
8 Correct 35 ms 3960 KB Output is correct
9 Correct 11 ms 1536 KB Output is correct
10 Correct 42 ms 4600 KB Output is correct
11 Correct 3 ms 384 KB Output is correct
12 Correct 2 ms 384 KB Output is correct
13 Correct 24 ms 2176 KB Output is correct
14 Correct 2 ms 384 KB Output is correct
15 Correct 65 ms 4728 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1066 ms 384 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1051 ms 384 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1080 ms 384 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 384 KB Output is correct
2 Execution timed out 1052 ms 380 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 384 KB Output is correct
2 Execution timed out 1063 ms 384 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 384 KB Output is correct
2 Execution timed out 1069 ms 384 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 384 KB Output is correct
2 Execution timed out 1057 ms 384 KB Time limit exceeded
3 Halted 0 ms 0 KB -