제출 #239368

#제출 시각아이디문제언어결과실행 시간메모리
239368kshitij_sodani곤돌라 (IOI14_gondola)C++17
100 / 100
63 ms6008 KiB
#include <bits/stdc++.h>
using namespace std;
typedef int64_t llo;
#define mp make_pair
#define pb push_back
#define a first 
#define b second
#include "gondola.h"
int valid(int n,int aa[]){
	vector<int> ind;
	set<int> ss;
	for(int i=0;i<n;i++){
		ss.insert(aa[i]);
	}
	if(ss.size()!=n){
		return 0;
	}
	for(int i=0;i<n;i++){
		if(aa[i]<=n){
			ind.pb(i);
		}
	}
	if(ind.size()<2){
		return 1;
	}
	int st=0;
	int bb[n];
	int co=aa[ind[0]];
	for(int i=ind[0];i<n;i++){
		bb[i]=co;
		co+=1;
		if(co==n+1){
			co=1;
		}
	}
	for(int i=0;i<ind[0];i++){
		bb[i]=co;
		co+=1;
		if(co==n+1){
			co=1;
		}
	}
	for(int i=0;i<n;i++){
		if(bb[i]!=aa[i] and aa[i]<=n){
			return 0;
		}
	}
	return 1;
}
int replacement(int n,int aa[],int bb[]){
/*	int vis[250001];
	int ma=0;
	for(int i=0;i<n;i++){
		vis[aa[i]]=1;
		ma=max(ma,aa[i]);
	}*/
	vector<int> ind;

	for(int i=0;i<n;i++){
		if(aa[i]<=n){
			ind.pb(i);
		}
	}
	/*if(ind.size()==0){
		int co=0;
		for(int i=1;i<=ma;i++){
			if(vis[i]==0){
				bb[co]=i;
				co++;
			}
		}
		return co;
	}*/
	int co;
	if(ind.size()==0){
		ind.pb(0);
		co=1;
	}
	else{
		co=aa[ind[0]];
	}

	int cc[n];
	for(int i=ind[0];i<n;i++){
		cc[i]=co;
		co+=1;
		if(co==n+1){
			co=1;
		}
	}
	for(int i=0;i<ind[0];i++){
		cc[i]=co;
		co+=1;
		if(co==n+1){
			co=1;
		}
	}
	vector<pair<int,int>> dd;
	for(int i=0;i<n;i++){
		if(aa[i]>n){
			dd.pb({aa[i],i});
		}
	}
	if(dd.size()==0){
		return 0;
	}
	sort(dd.begin(),dd.end());
	int cur=n+1;
	int ans=0;
/*	for(int i=0;i<n;i++){
		cout<<cc[i]<<',';
	}
	cout<<endl;*/
	for(auto i:dd){
		bb[ans]=cc[i.b];
		ans++;
		for(int j=cur;j<i.a;j++){
			bb[ans]=j;
			ans++;
		}
		cur=i.a+1;
	}
/*	for(int i=0;i<ans;i++){
		cout<<bb[i]<<",";
	}
	cout<<endl;
*/
	return ans;

}
llo e(llo aa,llo bb,llo cc){
	if(bb==0){
		return (llo)1;
	}
	llo ans=e(aa,bb/2,cc);
	ans*=ans;
	ans%=cc;
	if(bb%2==1){
		ans*=aa;
		ans%=cc;
	}
	return ans;
}
int countReplacement(int n,int aa[]){
	if(valid(n,aa)==0){
		return 0;
	}
	vector<int> ind;
	for(int i=0;i<n;i++){
		if(aa[i]>n){
			ind.pb(aa[i]);
		}
	}
	llo mod=1000000009;
	if(ind.size()==0){
		return 1;
	}

	sort(ind.begin(),ind.end());
	llo ans=1;
	if(ind.size()==n){
		ans=(llo)n;
	}
	int le=ind.size();
	int cur=n+1;
	for(auto i:ind){
		ans*=e((llo)le,(llo)(i-cur),mod);
		ans%=mod;
		le-=1;
		cur=i+1;
	//	cout<<ans<<endl;
	}
	return (int)ans;


}
/*int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	int n;
	cin>>n;
	int it[n];
	for(int i=0;i<n;i++){
		cin>>it[i];
	}
	int ac[25000];
	cout<<countReplacement(n,it)<<endl;



	return 0;
}*/

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

gondola.cpp: In function 'int valid(int, int*)':
gondola.cpp:15:14: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  if(ss.size()!=n){
     ~~~~~~~~~^~~
gondola.cpp:26:6: warning: unused variable 'st' [-Wunused-variable]
  int st=0;
      ^~
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:161:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  if(ind.size()==n){
     ~~~~~~~~~~^~~
#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...