Submission #136053

#TimeUsernameProblemLanguageResultExecution timeMemory
136053arthurconmyGondola (IOI14_gondola)C++14
60 / 100
25 ms2404 KiB
#include <bits/stdc++.h>
#ifndef ARTHUR_LOCAL
	#include "gondola.h"
#endif
using namespace std;

bool used[250001];

int valid(int n, int S[])
{
	pair<int,int> minn = {int(1e9),int(1e9)};

	for(int i=0; i<n; i++)
	{
		if(used[S[i]]) return 0;
		used[S[i]]=1;

		minn = min(minn, make_pair(S[i],i));
	}

	int cur = minn.first;
	if(cur>n) return 1;

	int one_pos = (minn.second - minn.first + 1 + n)%n;

	for(int j=0; j<n; j++)
	{
		if(S[(one_pos+j)%n] == j+1 || S[(one_pos+j)%n]>n) continue;
		return 0;
	}

	return 1;
}

int replacement(int n, int G[], int R[])
{
	pair<int,int> minn = {int(1e9),int(1e9)};

	for(int i=0; i<n; i++)
	{
		minn = min(minn, make_pair(G[i],i));
	}

	int cur = minn.first;

	int one_pos = (minn.second - minn.first + 1 + n)%n;

	if(cur>n) one_pos=0;

	vector<pair<int,int>> reps;

	for(int j=0; j<n; j++)
	{
		if(G[(one_pos+j)%n] == j+1) continue;
		reps.push_back(make_pair(G[(one_pos+j)%n],j+1));
	}

	sort(reps.begin(),reps.end());

	int ans=0;
	int next_boat=n+1;

	for(auto rep:reps)
	{
		int cur = rep.second;

		for(int i=next_boat; i<=rep.first; i++)
		{
			// cout << cur << endl;
			R[ans] = cur;
			cur=next_boat;

			ans++;
			next_boat++;
		}
	}

	// cout << endl;

	return ans;
}

int countReplacement(int n, int I[])
{
	return 1;
}
#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...