Submission #399819

#TimeUsernameProblemLanguageResultExecution timeMemory
399819Jasiekstrz곤돌라 (IOI14_gondola)C++17
75 / 100
48 ms4572 KiB
#include "gondola.h"
#include<bits/stdc++.h>
#define fi first
#define se second
using namespace std;
const int MOD=1e9+9;
void rot(int n,int inputSeq[])
{
	int gmn=0;
	for(int i=0;i<n;i++)
	{
		if(inputSeq[i]<inputSeq[gmn])
			gmn=i;
	}
	rotate(inputSeq,inputSeq+gmn,inputSeq+n);
	return;
}
int valid(int n,int inputSeq[])
{
	set<int> vis;
	for(int i=0;i<n;i++)
	{
		if(vis.find(inputSeq[i])!=vis.end())
			return 0;
		vis.insert(inputSeq[i]);
	}
	rot(n,inputSeq);
	for(int i=0;i<n;i++)
	{
		if(inputSeq[i]<=n && inputSeq[i]!=inputSeq[0]+i)
			return 0;
	}
	return 1;
}
bool comp_se(pair<int,int> a,pair<int,int> b)
{
	if(a.se==b.se)
		return a.fi<b.fi;
	return a.se<b.se;
}
int replacement(int n,int gondolaSeq[],int replacementSeq[])
{
	int l=0;
	vector<pair<int,int>> ch;
	rot(n,gondolaSeq);
	for(int i=0;i<n;i++)
	{
		if(gondolaSeq[i]>n)
			ch.emplace_back((gondolaSeq[0]+i-1)%n+1,gondolaSeq[i]);
	}
	sort(ch.begin(),ch.end(),comp_se);
	int nxt=n+1;
	for(auto v:ch)
	{
		replacementSeq[l++]=v.fi;
		while(nxt<v.se)
			replacementSeq[l++]=nxt++;
		nxt++;
	}
	return l;
}
int qp(int x,int y)
{
	if(y==0)
		return 1;
	long long pp=qp(x,y/2);
	pp=(pp*pp)%MOD;
	if(y%2==1)
		return (pp*x)%MOD;
	return pp;
}
int countReplacement(int n,int inputSeq[])
{
	if(valid(n,inputSeq)==0)
		return 0;
	long long ans=1;
	vector<int> ch;
	for(int i=0;i<n;i++)
	{
		if(inputSeq[i]>n)
			ch.emplace_back(inputSeq[i]);
	}
	sort(ch.begin(),ch.end());
	int lst=n,free=ch.size();
	for(auto v:ch)
	{
		ans=(ans*qp(free,v-lst-1))%MOD;
		lst=v;
		free--;
	}
	return ans;
}
#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...