Cod sursa(job #2999673)

Utilizator 321emanAndrei Radulescu 321eman Data 11 martie 2023 11:46:25
Problema Barman Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <fstream>
#include <iostream>

using namespace std;

ifstream in("barman.in");
ofstream out("barman.out");

int n;

int vec1[100], vec2[100];

int f(int p);
int mod(int x);

int main()
{
	in >> n;
	for (int i = 1; i <= n; i++)
	{
		in >> vec1[i];
		vec2[i] = vec1[i];
	}
	bool k = true;
	while (k)
	{
		k = false;
		for (int i = 1; i < n; i++)
		{
			if (vec1[i] > vec1[i + 1])
			{
				int aux = vec1[i];
				vec1[i] = vec1[i + 1];
				vec1[i + 1] = aux;
				k = true;
			}
		}
	}
	int mn = f(0);
	for (int i = 1; i < n; i++)
	{
		int k = f(i);
		if (k < mn)
		{
			mn = k;
		}
	}
	out << mn;
}

int f(int p)
{
	int vec3[100],timp=0;
	for (int i = 1; i <= n; i++)
	{
		vec3[i] = 0;
	}
	for (int i = 1; i <= n; i++)
	{
		if (vec2[i] != vec1[i + p])
		{
			timp += 20;
			for (int j = 1; j <= n; j++)
			{
				if (vec1[j] == vec2[i] && vec3[(j+p)%n] == 0)
				{
					int p2 = (j + p) % n;
					vec3[p2] = 1;
					if (mod(p2-i) < mod(i+n-p2))
					{
						timp += mod(p2 - i);
					}
					else {
						timp += mod(i + n - p2);
					}
					break;
				}
			}
		}
	}
	return timp;
}

int mod(int x)
{
	if (x < 0) return -x;
	return x;
}