Cod sursa(job #307796)

Utilizator perticas_catalinperticas catalin perticas_catalin Data 24 aprilie 2009 23:13:50
Problema NextSeq Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.47 kb
#include<stdio.h>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
FILE*fin=fopen("nextseq.in","r");
FILE*fout=fopen("nextseq.out","w");
#define nm 10005
int a[nm],b[nm],c[nm],wh[nm],dc,indice,n,m,p;
vector<int> v;
int comp(int d1,int s1[],int d2,int s2[])
{
    if(d1>d2) return 0;
    if(d1<d2) return 1;
    int i;
    for(i=1;i<=d1;i++)
      if(s1[i]<s2[i]) return 1;
      else if(s1[i]>s2[i]) return 0;
    return 0;  
}
void get_next()
{
     int poz,i;
     while(indice)
     {
       poz=wh[c[indice]];
       if(poz==n) 
       {
         indice--;
         continue ;
       }            
       c[indice]=v[poz+1];
       for(i=indice+1;i<=dc;i++)
         c[i]=v[1];
       indice=dc;  
       return ;
     }
     dc++;
     indice=dc;
     for(int i=1;i<=dc;i++) c[i]=v[1];
}
int main()
{
    int i,nr,rez;
    fscanf(fin,"%d%d%d",&n,&m,&p);
    for(i=1;i<=n;i++)
    {
      fscanf(fin,"%d",&nr);
      v.push_back(nr);
    }
    v.push_back(-1);
    sort(v.begin(),v.end());
    for(i=1;i<=n;i++)
      wh[v[i]]=i;
    rez=0;  
    for(i=1;i<=m;i++)
      fscanf(fin,"%d",&c[i]);
    for(i=1;i<=p;i++)
      fscanf(fin,"%d",&b[i]);
    dc=m; 
    indice=dc;
    get_next();
    while(1)
    {
      if(comp(dc,c,p,b))
      {
        rez++;
        get_next();
      }
      else break;
    }  
    fprintf(fout,"%d",rez);      
    fclose(fin);
    fclose(fout);
    return 0;
}