Submission #1304159

#TimeUsernameProblemLanguageResultExecution timeMemory
1304159the_commando_xGondola (IOI14_gondola)C++17
25 / 100
30 ms4660 KiB
#include "gondola.h"

#include <bits/stdc++.h>
using namespace std;

int valid(int n, int inputSeq[])
{
	set<int> seen;
	for (int i = 0; i < n; ++i)
		if (seen.count(inputSeq[i]))
			return 0;
		else
			seen.insert(inputSeq[i]);

	int start = -1;
	for (int i = 0; i < n; ++i)
		if (inputSeq[i] <= n)
		{
			start = i;
			break;
		}

	if (start != -1)
	{
		int base = inputSeq[start];
		for (int i = 0; i < n; ++i)
		{
			int expected = (base + i - start) % n;
			if (expected <= 0)
				expected += n;

			if (inputSeq[i] <= n && inputSeq[i] != expected)
				return 0;
		}
	}

	int nextReplacement = n + 1;
	for (int i = 0; i < n; ++i)
		if (inputSeq[i] > n)
			if (inputSeq[i] < nextReplacement)
				return 0;
			else
				nextReplacement = inputSeq[i] + 1;

	return 1;
}

int replacement(int n, int gondolaSeq[], int replacementSeq[])
{
	int start = -1;
	for (int i = 0; i < n; i++)
	{
		if (gondolaSeq[i] <= n)
		{
			start = i;
			break;
		}
	}

	int M = 0;
	for (int i = 0; i < n; ++i)
		M = max(M, gondolaSeq[i]);

	int totalBreaks = M - n;

	if (start == -1)
	{
		int idx = 0;
		for (int x = 1; x <= totalBreaks; ++x)
			replacementSeq[idx++] = x;
		return idx;
	}

	int idx = 0, base = gondolaSeq[start];
	map<int, int> brokenAt;

	for (int i = 0; i < n; ++i)
	{
		int expected = (base + i - start) % n;
		if (expected <= 0)
			expected += n;

		if (gondolaSeq[i] > n)
			brokenAt[gondolaSeq[i]] = expected;
	}

	int nextReplacement = n + 1;

	for (auto &[rep, broken] : brokenAt)
	{
		replacementSeq[idx++] = broken;

		for (int x = nextReplacement; x < rep; ++x)
			replacementSeq[idx++] = x;

		nextReplacement = rep;
	}

	return idx;
}

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