Pagini recente » Istoria paginii runda/concurs_epic | Cod sursa (job #2881138) | Cod sursa (job #651384) | Cod sursa (job #1684681) | Cod sursa (job #803413)
Cod sursa(job #803413)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <set>
#include <map>
#include <string>
using namespace std;
set<int> mp;
set<int>::iterator it;
map<int,int> mapa;
int v[5005];
string s;
int main()
{
int n;
ifstream f("secv.in");
ofstream g("secv.out");
f>>n;
f.get();
getline(f,s);
for(unsigned int i=0;i<s.size();i++)
{
if(isdigit(s[i]))
{
int nr=0;
while(isdigit(s[i]))
{
nr=nr*10+s[i]-'0';
++i;
}
v[++v[0]]=nr;
mp.insert(nr);
}
}
int ind=0,nr=mp.size();
for(it=mp.begin();it!=mp.end();it++)
mapa[*it]=++ind;
int minim=1<<30;
for(int i=1;i<=n;i++)
v[i]=mapa[v[i]];
for(int i=1;i<=n;i++)
{
if(v[i]==1)
{
int lungime=1;
int poz=i;
int val=v[i];
for(int j=poz;j<=n;j++)
if(v[j]==val+1)
{
lungime++;
if(lungime==nr)
{
poz=j;
break;
}
val=v[j];
}
if(lungime==nr)
minim=min(minim,poz-i+1);
}
}
if(minim==1<<30)
g<<-1;
else
g<<minim;
return 0;
}