Pagini recente » Cod sursa (job #812897) | Rating Alin Anton (alinant) | Cod sursa (job #1536743) | Cod sursa (job #454331) | Cod sursa (job #201134)
Cod sursa(job #201134)
#include<fstream>
#include<algorithm>
#include<cstring>
using namespace std;
int cauta(int el, int sir[], int poz, int l){
while(sir[poz]!=el&&poz<l) poz++;
if(poz==l)
return -1;
return poz-1;
}
int lung(int poz, int a[],int n, int s[], int c){
int i, poz2=poz;
for(i=1;i<c;i++){
poz2=cauta(s[i],a,poz2,n);
if(poz2==-1)
return -1;
}
return (poz2-poz+1);
}
int main(){
int a[5000], b[5000], n, i,ant, s[5000], c=0, min=10000,pozant=1,poz,l;
ifstream f("secv.in");
f>>n;
for(i=0;i<n;i++)
f>>a[i];
f.close();
memcpy(b,a, sizeof(a));
sort(b, b+n);
ant=b[0];
s[c++]=ant;
for(i=0;i<n;i++){
if(ant!=b[i])
s[c++]=b[i];
ant=b[i];
}
for(i=0, ant=b[i], poz=0; b[i]==ant;i++){
poz=cauta(ant,a,poz, n);
if(poz==-1&&i==0){
min=-1;
ofstream g("secv.out");
g<<min<<'\n';
g.close();
return 0;
}
else if(poz==-1) {
if(min==10000)
min=-1;
ofstream g("secv.out");
g<<min<<'\n';
g.close();
return 0;
}
else {
l=lung(poz, a, n, s,c);
if(l==-1)
pozant=-1;
if(l<min&&pozant==1)
min=l;
}
}
if(min==10000)
min=-1;
ofstream g("secv.out");
g<<min<<'\n';
g.close();
return 0;
}