제출 #138745

#제출 시각아이디문제언어결과실행 시간메모리
138745MohamedAhmed04Gondola (IOI14_gondola)C++14
60 / 100
61 ms4856 KiB
#include "gondola.h"
#include <bits/stdc++.h>
//#include "grader.cpp"
using namespace std ;

int valid(int n, int arr[])
{
	int st = -1;
	for(int i = 0 ; i < n ; ++i)
	{
		if(arr[i] <= n)
		{
			st = i ;
			break ;
		}
	}
	map<int , int>mp ;
	for(int i = 0 ; i < n ; ++i)
	{
		if(mp[arr[i]] > 0)
			return 0 ;
		mp[arr[i]]++ ;
	}
	if(st == -1)
		return 1 ;
	int idx = st , cnt = 0;
	while(true)
	{
		idx++ ;
		idx %= n ;
		cnt++ ;
		if(idx == st)
			break ;
		if(arr[idx] <= n)
			continue ;
		arr[idx] = (arr[st] + cnt) % n ;
		if(arr[idx] == 0)
			arr[idx] = n ;
	}
	idx = st , cnt = 0 ;
	while(true)
	{
		idx++ ;
		idx %= n ;
		cnt++ ;
		if(idx == st)
			break ;
		int x = (arr[st] + cnt) % n ;
		if(x == 0)
			x = n ;
		if(x != arr[idx] && arr[idx] <= n)
			return 0 ;
	}
    return 1;
}

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

int replacement(int n, int arr[], int replacementSeq[])
{
	int st = -1 , MAX = *max_element(arr , arr + n);
	map<int , int>mp ;
	for(int i = 0 ; i < n ; ++i)
		mp[arr[i]] = 1 ;
	for(int i = 0 ; i < n ; ++i)
	{
		if(arr[i] <= n)
		{
			st = i ;
			break ;
		}
	}
	vector< pair<int , int> >vp ;
	if(st == -1)
	{
		for(int i = 0 ; i < n ; ++i)
			vp.push_back({arr[i] , i+1}) ;
	}
	else
	{
		int idx = st , cnt = 0;
		while(true)
		{
			idx++ ;
			idx %= n ;
			cnt++ ;
			if(idx == st)
				break ;
			if(arr[idx] <= n)
				continue ;
			int x = (arr[st] + cnt) % n ;
			if(x == 0)
				x = n ;
			vp.push_back({arr[idx] , x}) ;
		}
	}
	sort(vp.begin() , vp.end()) ;
	int ans = 0 , last = n+1;
	for(int i = 0 ; i < vp.size() ; ++i)
	{
		replacementSeq[ans] = vp[i].second ;
		ans++ ;
		for(int j = last ; j < vp[i].first ; ++j)
		{
			replacementSeq[ans] = j ;
			ans++ ;
		}
		last = vp[i].first + 1 ;
	}
	return ans ;
}

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

int countReplacement(int n, int arr[])
{
	if(!valid(n , arr))
		return 0 ;
	int a = 0 , b = 0 , cnt = 0;
	for(int i = 0 ; i < n ; ++i)
	{
		if(arr[i] > n)
			cnt++ ;
		if(arr[i] == n+2)
			a = 1 ;
		if(arr[i] == n+3)
			b = 1 ;
	}
	if(cnt == n)
	{
		if(n == 1 || n == 3)
			return 1 ;
		return 2 ;
	}
	if(a && b)
		return 2 ;
	return 1 ;
}

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

gondola.cpp: In function 'int replacement(int, int*, int*)':
gondola.cpp:99:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i = 0 ; i < vp.size() ; ++i)
                  ~~^~~~~~~~~~~
gondola.cpp:61:16: warning: unused variable 'MAX' [-Wunused-variable]
  int st = -1 , MAX = *max_element(arr , arr + 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...