Cod sursa(job #1851285)

Utilizator Stoica_StefanStoica Stefan Stoica_Stefan Data 19 ianuarie 2017 16:41:35
Problema Secv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

ifstream fin("secv.in");
ofstream fout("secv.out");

int main()
{
    int n;
    fin >> n;
		int v[n], c[n];
		for(int i = 0; i < n; i++)
		{
			fin >> v[i];
			c[i]=v[i];			
		}
		sort(c, c+n);
		int k = 0;
		for(int i = 0; i < n; i++)
			if(c[i] != c[i+1])
			{
				c[k] = c[i];
				k++;
			}
		int d[n];
		for(int i = 0; i < k; i++)
			for(int j = 0; j < n; j++)
				if(v[j] == c[i])	v[j] = i;
		for(int i = 0; i < n; i++)
		{
			int j;
			for(j = i+1; j < n; j++)
				if(v[j] == v[i]+1)
				{
					d[i] = j - i;
					j = n+1;
				}
			if(j == n)	d[i] = -1;
		}
		int j, dist, mind = 5001;
		for(int i = 0; i < n; i++)
		{
			if(v[i] == 0)
			{
				j = i;
				dist = 0;
				while(d[j] != -1 && v[j] != k-1)
				{
					dist += d[j];
					j += d[j];
				}
				if(v[j] == k-1)
					if(dist + 1 < mind)
						mind = dist + 1;
			}
		}
		if(mind == 5001)	fout << -1;
		else fout << mind;
    return 0;
}