Cod sursa(job #3302727)

Utilizator Ilie_MityIlie Dumitru Ilie_Mity Data 10 iulie 2025 13:23:54
Problema Barman Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.92 kb
// Ilie "The-Winner" Dumitru
// Dumnezeu sa o ierte
#include<bits/stdc++.h>
#define sz(x) ((int)(x).size())
#define all(x) (x).begin(), (x).end()
using ll=long long;
constexpr int NMAX=605;
constexpr ll MOD=1000000007;

ll oo=1LL<<50;
int N;
int v[NMAX], aux[NMAX];

ll calc()
{
	ll ans=0;
	int i;
	std::map<int, std::vector<int> > A, B;

	for(i=0;i<N;++i)
		if(v[i]!=aux[i])
		{
			ans+=20;
			A[v[i]].push_back(i);
			B[aux[i]].push_back(i);
		}

	for(auto& p : A)
	{
		auto& v=p.second;
		auto& u=B[p.first];

		for(i=0;i<sz(u);++i)
			ans+=std::abs(u[i]-v[i]);
	}

	return ans;
}

int main()
{
	FILE* f=fopen("barman.in", "r"), *g=fopen("barman.out", "w");
	int i;
	ll ans=oo;

	fscanf(f, "%d", &N);
	for(i=0;i<N;++i)
	{
		fscanf(f, "%d", v+i);
		aux[i]=v[i];
	}

	std::sort(aux, aux+N);

	for(i=0;i<N;++i)
	{
		ans=std::min(ans, calc());
		std::rotate(aux, aux+1, aux+N);
	}

	fprintf(g, "%lld\n", ans);

	fclose(f);
	fclose(g);
	return 0;
}