Submission #382696

#TimeUsernameProblemLanguageResultExecution timeMemory
382696TrunktyGondola (IOI14_gondola)C++14
75 / 100
24 ms3180 KiB
#include <iostream>
#include <algorithm>
#include <vector>
#include "gondola.h"
using namespace std;
 
int valid(int n, int inputSeq[]){
	bool check[250005];
	for(int i=1;i<250005;i++){
		check[i] = false;
	}
	for(int i=0;i<n;i++){
		if(check[inputSeq[i]]){
			return 0;
		}
		check[inputSeq[i]] = true;
	}
	int ind=0;
	for(int i=0;i<n;i++){
		if(inputSeq[i]<=n){
			ind = i-(inputSeq[i]-1);
			if(ind<0){
				ind += n;
			}
			break;
		}
	}
	int now = 1;
	for(int i=ind;i<n;i++){
		if(inputSeq[i]<=n){
			if(inputSeq[i]!=now){
				return 0;
			}
		}
		now++;
	}
	for(int i=0;i<ind;i++){
		if(inputSeq[i]<=n){
			if(inputSeq[i]!=now){
				return 0;
			}
		}
		now++;
	}
	return 1;
}
 
int replacement(int n, int gondolaSeq[], int replacementSeq[]){
	int ind=0;
	for(int i=0;i<n;i++){
		if(gondolaSeq[i]<=n){
			ind = i-(gondolaSeq[i]-1);
			if(ind<0){
				ind += n;
			}
			break;
		}
	}
	int have[250005],maxi=-1,pos=0;
	for(int i=1;i<250005;i++){
		have[i] = -1;
	}
	for(int i=0;i<n;i++){
		have[gondolaSeq[i]] = ((i-ind+n)%n)+1;
		if(gondolaSeq[i]>maxi){
			maxi = gondolaSeq[i];
			pos = ((i-ind+n)%n)+1;
		}
	}
	for(int i=n+1;i<maxi;i++){
		if(have[i]==-1){
			replacementSeq[i-n-1] = pos;
			pos = i;
		}
		else{
			replacementSeq[i-n-1] = have[i];
		}
	}
	replacementSeq[maxi-n-1] = pos;
	return maxi-n;
}
long long mod=1000000009;
int countReplacement(int n, int inputSeq[]){
	if(not valid(n,inputSeq)){
		return 0;
	}
	long long ans=1,cnt=0,now=n+1;
	bool have[250005];
	for(int i=1;i<250005;i++){
		have[i] = false;
	}
	for(int i=0;i<n;i++){
		have[inputSeq[i]] = true;
		if(inputSeq[i]>n){
			cnt++;
		}
	}
	while(cnt>0){
		if(not have[now]){
			ans *= cnt;
			ans = ans%mod;
		}
		else{
			cnt--;
		}
		now++;
	}
	int k = ans;
	return k;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...