Pagini recente » Cod sursa (job #1118847) | Cod sursa (job #532842) | Istoria paginii runda/9_2 | Cod sursa (job #546964) | Cod sursa (job #882885)
Cod sursa(job #882885)
#include <stdio.h>
long n, nr, min;
long s[5061];
int main() {
long i, j, k;
freopen("secv.in", "r", stdin);
freopen("secv.out", "w", stdout);
scanf("%ld", &n);
if(n == 1) {
printf("1\n");
return 0;
}
for(i = 1; i <= n; i++)
scanf("%ld", &s[i]);
nr = 0;
while(true) {
for(i = 1; i <= n; i++)
if(s[i] >= nr)
break;
if(i == n + 1)
break;
min = s[i];
for(i++; i <= n; i++)
if(s[i] < min && s[i] >= nr)
min = s[i];
for(i = 1; i <= n; i++)
if(s[i] == min)
s[i] = nr;
nr++;
}
i = 1;
min = n + 1;
while(true) {
while(s[i] != 0 && i <= n) // cat timp nu am un prim element
i++; // incrementez
if(i == n + 1) //daca nu am mai gasit,
break; // ies
j = i + 1; //incep de la caracterul de dupa
for(k = 1; k < nr; k++) { // si caut in ordine toate elementele necesare
while(s[j] != k && j <= n) // daca n-am gasit inca si n-am iesit din vector
j++; // incrementez
if(j > n) // daca am iesit din vector
break; // ies din for
}
if(k != nr) // daca nu am gasit toate elementele
break; // ies
if(j - i + 1 < min) // daca am o solutie mai buna
min = j - i + 1; // minul este pus pe aceasta
i++; // sar peste elementul prim curent
}
if(min < n + 1)
printf("%ld\n", min);
else printf("-1\n");
return 0;
}