제출 #94469

#제출 시각아이디문제언어결과실행 시간메모리
94469fjzzq2002Gondola (IOI14_gondola)C++14
100 / 100
105 ms6904 KiB
#include "gondola.h"
#include <bits/stdc++.h>
using namespace std;

int valid(int n,int x_[])
{
	static int x[100001];
	set<int> u;
	int s=0;
	for(int i=0;i<n;++i)
	{
		x[i]=x_[i]-1; u.insert(x[i]);
		if(x[i]<n) s=(x[i]-i+n)%n;
		if(x[i]<0) return 0;
	}
	if(int(u.size())!=n) return 0;
	for(int i=0;i<n;++i)
		if(x[i]<n&&(s+i)%n!=x[i]) return 0;
	return 1;
}

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

int replacement(int n, int x_[], int o[])
{
	static int x[100001],y[100001];
	set<int> em;
	map<int,int> t;
	int s=0,mx=0;
	for(int i=0;i<n;++i)
	{
		x[i]=x_[i]-1;
		t[x[i]]=i; mx=max(mx,x[i]);
		if(x[i]<n) s=(x[i]-i+n)%n;
		if(x[i]<0) return 0;
	}
	for(int i=0;i<n;++i)
	{
		y[i]=(s+i)%n;
		if(y[i]!=x[i]) em.insert(i);
	}
	int on=0;
	for(int j=n;j<=mx;++j)
	{
		int p;
		if(t.count(j))
			em.erase(p=t[j]);
		else p=*em.begin();
		o[on++]=y[p]+1; y[p]=j;
	}
	return on;
}

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

#define fi first
#define se second
const int MOD=1e9+9;
typedef long long ll;
ll qp(ll a,ll b)
{
	ll x=1; a%=MOD;
	while(b)
	{
		if(b&1) x=x*a%MOD;
		a=a*a%MOD; b>>=1;
	}
	return x;
}

int countReplacement(int n, int x_[])
{
	if(!valid(n,x_)) return 0;
	static int x[100001],y[100001];
	map<int,int> sb;
	int s=n,mx=0;
	for(int i=0;i<n;++i)
	{
		x[i]=x_[i]-1; mx=max(mx,x[i]);
		if(x[i]<n) s=(x[i]-i+n)%n;
		if(x[i]<0) return 0;
	}
	for(int i=0;i<n;++i)
	{
		y[i]=(s+i)%n;
		if(y[i]!=x[i]) sb[x[i]]--;
	}
	int ini=sb.size();
	sb[mx+1]=0;
	sb[n-1]+=ini;
	ll ans=1;
	int su=0;
	for(auto t=sb.begin();;++t)
	{
		if(t->fi>mx) break;
		su+=t->se;
		auto u=t; ++u;
		ans=ans*qp(su,u->fi-t->fi-1)%MOD;
	}
	if(s==n) ans=ans*(ll)n%MOD;
	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...