Submission #799046

#TimeUsernameProblemLanguageResultExecution timeMemory
799046FatihSolak곤돌라 (IOI14_gondola)C++17
90 / 100
1089 ms4980 KiB
#include "gondola.h"
#include <bits/stdc++.h>
using namespace std;
vector<int> get(int n,int inputSeq[]){
	int pos = 0;
	for(int i = 0;i<n;i++){
		if(inputSeq[i] <= n){
			pos = (i + 1 - inputSeq[i] + n)%n;
		}
	}
	vector<int> ret;
	for(int i = pos;i < n;i++){
		ret.push_back(inputSeq[i]);
	}
	for(int i = 0;i<pos;i++){
		ret.push_back(inputSeq[i]);
	}
	return ret;
}
int valid(int n, int inputSeq[]){
	vector<int> inp = get(n,inputSeq);
	set<int> s;
	for(int i = 0;i<n;i++){
		s.insert(inp[i]);
		if(inp[i] <= n && inp[i] != i + 1){
			return 0;
		}
	}
	if(s.size() != n)	
		return 0;
	return 1;
}

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

int replacement(int n, int gondolaSeq[], int replacementSeq[]){
	vector<int> inp = get(n,gondolaSeq);
	map<int,int> mp;
	int maxi = 0;
	for(int i = 0;i<n;i++){
		if(inp[i] > n){
			mp[inp[i]] = i;
			if(inp[maxi] < inp[i])
				maxi = i;
		}
	}
	int l = 0;
	int tmp = inp[maxi];
	inp[maxi] = maxi + 1;
	for(int i = n + 1;i <= tmp;i++){
		if(mp.count(i) && mp[i] != maxi){
			replacementSeq[l++] = mp[i] + 1;
		}
		else{
			replacementSeq[l++] = inp[maxi];
			inp[maxi] = i;
		}
	}
	return l;
}

//----------------------
const int mod = 1e9 + 9;
int countReplacement(int n, int inputSeq[]){
	if(!valid(n,inputSeq)){
		return 0;
	}
	vector<int> inp = get(n,inputSeq);
	int ans = 1;
	bool ok = 1;
	set<int> s;
	for(int i = 0;i<n;i++){
		if(inp[i] <= n){
			ok = 0;
		}
		else s.insert(inp[i]);
	}
	if(ok){
		ans = (long long)ans * n % mod;
	}
	if(s.size()){
		int cnt = s.size();
		int num = *s.rbegin();
		for(int i = n + 1;i<=num;i++){
			if(s.count(i)){
				cnt--;
				continue;
			}
			ans = (long long)ans * cnt % mod;
		}
	}
	return ans;
}

Compilation message (stderr)

gondola.cpp: In function 'int valid(int, int*)':
gondola.cpp:29:14: warning: comparison of integer expressions of different signedness: 'std::set<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   29 |  if(s.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...