Cod sursa(job #803404)

Utilizator alexalghisiAlghisi Alessandro Paolo alexalghisi Data 27 octombrie 2012 15:25:24
Problema Secv Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.46 kb
#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(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);
            cout<<nr<<" ";
        }
    }
    int ind=0,nr=mp.size();
    for(it=mp.begin();it!=mp.end();it++)
        mapa[*it]=++ind; // nu stiu daca am nevoie
    int minim=1<<30;
    for(int i=1;i<=n;i++)
    {
        if(mapa[v[i]]==1)
        {
            int lungime=1;
            int poz=i;
            int val=mapa[v[i]];

            for(int j=poz;j<=n;j++)
                if(mapa[v[j]]==val+1)
                {
                    lungime++;
                    if(lungime==nr)
                    {
                        poz=j;
                        break;
                    }
                    val=mapa[v[j]];
                }
            if(lungime==nr)
                minim=min(minim,poz-i+1);
        }
    }
    if(minim==1<<30)
        g<<-1;
        else
            g<<minim;
    return 0;
}