Pagini recente » Cod sursa (job #1329767) | Cod sursa (job #68568) | Cod sursa (job #1541091) | Istoria paginii utilizator/cruceruvlad | Cod sursa (job #1851285)
#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;
}