제출 #39142

#제출 시각아이디문제언어결과실행 시간메모리
39142faustaadp곤돌라 (IOI14_gondola)C++14
100 / 100
76 ms48924 KiB
#include "gondola.h"
#include<bits/stdc++.h>
#define ll long long
#define pb push_back
using namespace std;
ll i,a[1010101],sat,tt,mi,ma,c[1010101],e[1010101],f[1010101],hs,b[1010101],hl,mo=1000000009;
unordered_map<ll,ll> am;
vector<ll> v;
int valid(int n, int inputSeq[])
{
	for(i=0;i<n;i++)
		if(am[inputSeq[i]]==0)
			am[inputSeq[i]]++;
		else
			return 0;
	//cout<<"sd";
	mi=10e17;
	for(i=0;i<n;i++)
		if(inputSeq[i]<mi)
		{
			mi=inputSeq[i];
			sat=i;
			tt=mi-1;
		}
	for(i=sat;i<2*n;i++)
	{
		tt++;
		if(tt>n)
			tt-=n;
		if(inputSeq[i%n]<=n)
			if(inputSeq[i%n]!=tt)
			{
			//	cout<<inputSeq[i%n]<<" "<<tt<<"\n";
				return 0;
			}
	}
	return 1;
}

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

int replacement(int n, int gondolaSeq[], int replacementSeq[])
{
	for(i=0;i<n;i++)
		a[i]=gondolaSeq[i];
	for(i=0;i<n;i++)
		ma=max(ma,(ll)gondolaSeq[i]);
	mi=10e17;
	for(i=0;i<n;i++)
		if(gondolaSeq[i]<mi)
		{
			mi=gondolaSeq[i];
			sat=i;
			tt=mi-1;
		}
	for(i=sat;i<2*n;i++)
	{
		tt++;
		while(tt>n)
			tt-=n;
	//	cout<<i%n<<" "<<tt<<"\n";
		e[i%n]=tt;
	}
	for(i=0;i<n;i++)
	{
		c[a[i]]=e[i];
		f[i+1]=i+1;
	}
	for(i=n+1;i<=ma;i++)
	{
		if(c[i]==0)
		{
			replacementSeq[i-n-1]=f[c[ma]];
			f[c[ma]]=i;
		}
		else
		{
			replacementSeq[i-n-1]=f[c[i]];
			f[c[i]]=i;
		}
	//	cout<<i-n-1<<" "<<replacementSeq[i-n-1]<<"\n";
	}
	return ma-n;
}

//----------------------
ll powo(ll aa,ll bb)
{
	if(bb==0)
		return 1;
	else
	if(bb==1)
		return aa;
	else
	{
		ll tj=powo(aa,bb/2);
		tj*=tj;
		tj%=mo;
		if(bb%2==1)
			tj*=aa;
		tj%=mo;
		return tj;
	}
}
int countReplacement(int n, int inputSeq[])
{
	if(!valid(n,inputSeq))
		return 0;
	else
	{
		hs=1;
		v.pb(n);
		for(i=0;i<n;i++)
			if(inputSeq[i]>n)
			{
			//	b[inputSeq[i]]=1;
				v.pb(inputSeq[i]);
				hl++;
			}
		for(i=0;i<n;i++)
			ma=max(ma,(ll)inputSeq[i]);
		mi=10e17;
		for(i=0;i<n;i++)
			if(inputSeq[i]<mi)
			{
				mi=inputSeq[i];
				sat=i;
				tt=mi-1;
			}
		sort(v.begin(),v.end());
		for(i=1;i<v.size();i++)
		{
			hs*=powo(hl,v[i]-v[i-1]-1);
			hs%=mo;
			hl--;
		}
		if(mi>n)
			hs*=n;
		hs%=mo;
	}
	return hs;
}

컴파일 시 표준 에러 (stderr) 메시지

gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:131:12: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(i=1;i<v.size();i++)
            ^
#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...