답안 #73526

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
73526 2018-08-28T11:34:06 Z TuGSGeReL 곤돌라 (IOI14_gondola) C++14
60 / 100
99 ms 5608 KB
#include "gondola.h"
#include<bits/stdc++.h>
#define ll int
#define mp make_pair
#define pub push_back
#define pob pop_back
#define ss second
#define ff first
#define ext exit(0)
using namespace std;
ll i,j,z=0,st,ans;
vector<ll> vc,vv;
vector<pair<ll,ll> >v;
map<ll,ll>m;
int valid(int n, int inputSeq[])
{
	for(i=0;i<n;i++){
		if(m[inputSeq[i]]==1) return 0;
		m[inputSeq[i]]++;
	}
	for(i=0;i<n;i++){
		if(inputSeq[i]<n){
			st=(i-inputSeq[i]+1+n)%n;
			for(i=st;i<n;i++) vv.pub(inputSeq[i]);
			for(i=0;i<st;i++) vv.pub(inputSeq[i]);
			for(i=0;i<n;i++){
				if(vv[i]>n) continue;
				if(vv[i]!=i+1) return 0;
			}
			return 1;
		}
	}
	return 1;
}
int replacement(int n, int gondolaSeq[], int replacementSeq[]) {
	for(i=0;i<n;i++) gondolaSeq[i]--;
	
	for(i=0;i<n;i++){
		if(gondolaSeq[i] < n){
			st=(i-gondolaSeq[i]+n)%n;
		}
	}
	for(i=0;i<n;i++){
		if(gondolaSeq[i] >= n) v.pub(mp(gondolaSeq[i],(i-st+n)%n));
	}
	sort(v.begin(),v.end());
	if(v.size()==0) {
		return 0;
	}
	while(1){
		if(v.size()==1){
			while(v[0].ff>v[0].ss && v[0].ff>=n){
				if(v[0].ff-1>=n)vc.pub(v[0].ff-1);
				else vc.pub(v[0].ss);
				v[0].ff--;
			}
			break;
		}
		if(v.back().ff==v[v.size()-2].ff+1){
			vc.pub(v.back().ss);
			v.pob();
		}
		else {
			vc.pub(v.back().ff-1);
			v.back().ff--;
			if(v.back().ff==v.back().ss) v.pob();
		}
	}
	reverse(vc.begin(),vc.end());
	for(i=0;i<vc.size();i++) replacementSeq[i]=vc[i]+1;
	return vc.size();
}
ll countReplacement(int n, int inputSeq[]) {
	if(!valid(n,inputSeq)) return 0;
	bool boo=false;
	for(i=0;i<n;i++){
		if(inputSeq[i]>n)vc.pub(inputSeq[i]);
		else boo=true;
	}
	sort(vc.begin(),vc.end());
	ll prev=n+1,ans=1,mod=1e9+9;
	for(i=0;i<vc.size();i++){
		ll o=vc.size()-i,s=1,u=vc[i]-prev;
		while(u>0){
			if(u%2){
				s=(ll)(s*o)%mod;
			}
			o=(ll)(o*o)%mod;
			u/=2;
		}
		ans=(ll)(ans*s)%mod;
		prev=vc[i]+1;
	}
	if(!boo) ans=(ll)(ans*n)%mod;
	return ans;
}

Compilation message

gondola.cpp: In function 'int replacement(int, int*, int*)':
gondola.cpp:70:11: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(i=0;i<vc.size();i++) replacementSeq[i]=vc[i]+1;
          ~^~~~~~~~~~
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:82:11: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(i=0;i<vc.size();i++){
          ~^~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 376 KB Output is correct
2 Correct 2 ms 468 KB Output is correct
3 Correct 2 ms 500 KB Output is correct
4 Correct 2 ms 500 KB Output is correct
5 Correct 2 ms 552 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 552 KB Output is correct
2 Correct 3 ms 552 KB Output is correct
3 Correct 2 ms 552 KB Output is correct
4 Correct 3 ms 680 KB Output is correct
5 Correct 2 ms 680 KB Output is correct
6 Correct 26 ms 2796 KB Output is correct
7 Correct 16 ms 2796 KB Output is correct
8 Correct 36 ms 4856 KB Output is correct
9 Correct 15 ms 4856 KB Output is correct
10 Correct 56 ms 5608 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 5608 KB Output is correct
2 Correct 3 ms 5608 KB Output is correct
3 Correct 3 ms 5608 KB Output is correct
4 Correct 4 ms 5608 KB Output is correct
5 Correct 3 ms 5608 KB Output is correct
6 Correct 23 ms 5608 KB Output is correct
7 Correct 23 ms 5608 KB Output is correct
8 Correct 43 ms 5608 KB Output is correct
9 Correct 17 ms 5608 KB Output is correct
10 Correct 50 ms 5608 KB Output is correct
11 Correct 2 ms 5608 KB Output is correct
12 Correct 3 ms 5608 KB Output is correct
13 Correct 37 ms 5608 KB Output is correct
14 Correct 4 ms 5608 KB Output is correct
15 Correct 99 ms 5608 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 5608 KB Output is correct
2 Correct 3 ms 5608 KB Output is correct
3 Correct 3 ms 5608 KB Output is correct
4 Correct 3 ms 5608 KB Output is correct
5 Correct 3 ms 5608 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 5608 KB Output is correct
2 Correct 2 ms 5608 KB Output is correct
3 Correct 2 ms 5608 KB Output is correct
4 Correct 2 ms 5608 KB Output is correct
5 Correct 2 ms 5608 KB Output is correct
6 Correct 3 ms 5608 KB Output is correct
7 Correct 3 ms 5608 KB Output is correct
8 Correct 3 ms 5608 KB Output is correct
9 Correct 3 ms 5608 KB Output is correct
10 Correct 3 ms 5608 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 5608 KB Output is correct
2 Correct 2 ms 5608 KB Output is correct
3 Correct 2 ms 5608 KB Output is correct
4 Correct 2 ms 5608 KB Output is correct
5 Correct 3 ms 5608 KB Output is correct
6 Correct 2 ms 5608 KB Output is correct
7 Correct 3 ms 5608 KB Output is correct
8 Correct 3 ms 5608 KB Output is correct
9 Correct 4 ms 5608 KB Output is correct
10 Correct 3 ms 5608 KB Output is correct
11 Correct 15 ms 5608 KB Output is correct
12 Correct 17 ms 5608 KB Output is correct
13 Correct 20 ms 5608 KB Output is correct
14 Correct 18 ms 5608 KB Output is correct
15 Correct 35 ms 5608 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 5608 KB Output is correct
2 Correct 2 ms 5608 KB Output is correct
3 Correct 2 ms 5608 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 5608 KB Output is correct
2 Correct 3 ms 5608 KB Output is correct
3 Correct 2 ms 5608 KB Output is correct
4 Correct 3 ms 5608 KB Output is correct
5 Correct 2 ms 5608 KB Output is correct
6 Correct 2 ms 5608 KB Output is correct
7 Incorrect 3 ms 5608 KB Integer -841481820 violates the range [0, 1000000008]
8 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 5608 KB Output is correct
2 Correct 4 ms 5608 KB Output is correct
3 Correct 2 ms 5608 KB Output is correct
4 Correct 3 ms 5608 KB Output is correct
5 Correct 3 ms 5608 KB Output is correct
6 Correct 3 ms 5608 KB Output is correct
7 Incorrect 2 ms 5608 KB Integer -841481820 violates the range [0, 1000000008]
8 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 5608 KB Output is correct
2 Correct 2 ms 5608 KB Output is correct
3 Correct 2 ms 5608 KB Output is correct
4 Correct 2 ms 5608 KB Output is correct
5 Correct 3 ms 5608 KB Output is correct
6 Correct 2 ms 5608 KB Output is correct
7 Incorrect 2 ms 5608 KB Integer -841481820 violates the range [0, 1000000008]
8 Halted 0 ms 0 KB -