답안 #30343

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
30343 2017-07-23T09:11:18 Z inqr 곤돌라 (IOI14_gondola) C++14
컴파일 오류
0 ms 0 KB
#include "gondola.h"
#include <bits/stdc++.h>
#define pb push_back
#define mp make_pair
#define rt insert
#define st first
#define nd second
#define ll long long
#define pii pair < int , int >
#define DB printf("debug\n");
#define umax( x , y ) x = max( x , (y) )
#define umin( x , y ) x = min( x , (y) )
#define all(x) x.begin() , x.end()
#define MOD 1000000009
using namespace std;
int nx(int i,int sz){
	return (i+1)%(sz);
}
map < int,int > timesseen;
int origl=-1;
int broken=0;
long long ans=1;
int valid(int n, int inputSeq[])
{
	vector < int > orig;
	for(int i=0;i<n;i++){
		int nxx=nx(i,n);
		timesseen[inputSeq[i]]++;
		if(timesseen[inputSeq[i]]>1)return 0;
		if(inputSeq[i]<=n)orig.pb(inputSeq[i]);
		if(inputSeq[i]<=n&&inputSeq[nxx]<=n){
			if(inputSeq[i]==n && inputSeq[nxx]!=1)return 0;
			else if(inputSeq[i]<n && inputSeq[nxx]!=inputSeq[i]+1)return 0;
		}
	}
	int startover=0;
	for(int i=0;i<orig.size();i++){
		int nxx=nx(i,orig.size());
		if(orig[i]<orig[nxx])continue;
		else if(startover==0)startover++;
		else if(startover==1)return 0;
	}
 	return 1;
}

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

int replacement(int n, int gondolaSeq[], int replacementSeq[])
{
	for(int i=0;i<n;i++){
		int nxx=nx(i,n);
		if(gondolaSeq[i]<=n){
			origl=i-(gondolaSeq[i]-1)+n;
			origl%=n;
		}
		umax(broken,gondolaSeq[i]-n);
	}
	if(origl==-1){
		origl=0;
		ans*=n;
		ans%=MOD;
	}

	int repind[broken];
	set < int > repcand;
	int orig[n];

	for(int i=0;i<n;i++){
		int ogon=(i+1)-origl+n;
		if(ogon>n)ogon%=n;
		orig[i]=ogon;
		if(gondolaSeq[i]>n){
			repcand.insert(i);
			repind[gondolaSeq[i]-n-1]=i;
		}
	}

	for(int i=0;i<broken;i++){
		if(!repind[i]){
			ans*=repcand.size();ans%=MOD;
			replacementSeq[i]=orig[*repcand.begin()];
			orig[*repcand.begin()]=i+n+1;
		}
		else{
			replacementSeq[i]=orig[repind[i]];
			orig[repind[i]]=i+n+1;
			repcand.erase(repcand.find(repind[i]));
		}
	}
	return broken;
}
int replacement2(int n, int gondolaSeq[])
{
	for(int i=0;i<n;i++){
		int nxx=nx(i,n);
		if(gondolaSeq[i]<=n){
			origl=i-(gondolaSeq[i]-1)+n;
			origl%=n;
		}
		umax(broken,gondolaSeq[i]-n);
	}
	if(origl==-1){
		origl=0;
		ans*=n;
		ans%=MOD;
	}

	int repind[broken];
	set < int > repcand;
	int orig[n];

	for(int i=0;i<n;i++){
		int ogon=(i+1)-origl+n;
		if(ogon>n)ogon%=n;
		orig[i]=ogon;
		if(gondolaSeq[i]>n){
			repcand.insert(i);
			repind[gondolaSeq[i]-n-1]=i;
		}
	}

	for(int i=0;i<broken;i++){
		if(!repind[i]){
			ans*=repcand.size();ans%=MOD;
			orig[*repcand.begin()]=i+n+1;
		}
		else{
			replacementSeq[i]=orig[repind[i]];
			orig[repind[i]]=i+n+1;
		}
	}
	return broken;
}

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

int countReplacement(int n, int inputSeq[])
{
  	if(valid(n,inputSeq)==0)return 0;
  	int a=replacement2(n,gondolaSeq);
  	if(a==0)return 1;
  	return ans;
}

Compilation message

gondola.cpp: In function 'int valid(int, int*)':
gondola.cpp:37:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0;i<orig.size();i++){
               ^
gondola.cpp: In function 'int replacement(int, int*, int*)':
gondola.cpp:51:7: warning: unused variable 'nxx' [-Wunused-variable]
   int nxx=nx(i,n);
       ^
gondola.cpp: In function 'int replacement2(int, int*)':
gondola.cpp:95:7: warning: unused variable 'nxx' [-Wunused-variable]
   int nxx=nx(i,n);
       ^
gondola.cpp:128:4: error: 'replacementSeq' was not declared in this scope
    replacementSeq[i]=orig[repind[i]];
    ^
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:140:25: error: 'gondolaSeq' was not declared in this scope
    int a=replacement2(n,gondolaSeq);
                         ^