Cod sursa(job #943534)

Utilizator superman_01Avramescu Cristian superman_01 Data 25 aprilie 2013 18:50:11
Problema NextSeq Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.58 kb


#include<cstdio>
#include<vector>
#include<algorithm>


FILE *f=fopen("nextseq.in","r");
FILE *g=fopen("nextseq.out","w");

using namespace std;

const int NMAX=10005;

int poz[NMAX];
int v[NMAX],v1[NMAX],v2[NMAX];
int n,m,p,Answer;

void Read ( void )
{
 fscanf(f,"%d%d%d",&n,&m,&p);
 for(int i(1) ; i <= n ; ++i )
 {
     fscanf(f,"%d",&v[i]);

 }
  sort(v+1,v+n+1);
  for(int i(1) ; i <= n ; ++i )
  {
      poz[v[i]]=i;
  }
  for(int i(m) ; i ; --i )
 {
     int x;
     fscanf(f,"%d",&x);
     v1[i]=poz[x];
 }
  for(int i(p) ; i  ; --i )
 {
     int x;
     fscanf(f,"%d",&x);
     v2[i]=poz[x];
 }
 fclose(f);

}

void Solve ( void )
{


   while( true )
  {
      int i;
     for( i=1 ;i <= m+1 && v1[i] == n ; ++i );
     ++v1[i];
     if( i == m+1)

            ++m;

      for (int ii(i-1) ; ii ; --ii )
            v1[ii]=1;

      if( m == p)
      {
          bool some_dif=false;
          for(i=p; i ; --i )
          {
              if( v1[i] != v2[i] )
              {
                  some_dif=true;
                  if( v1[i] < v2[i] )
                  {
                      ++Answer;
                      break;
                  }
                  else
                  {
                      return;
                  }
               }


          }
if( some_dif == false)
                return ;

      }
      else
        ++Answer;
  }

}

void Write ( void )
{

 fprintf(g,"%d",Answer);
 fclose(g);
}
int main ( void )
{
    Read();
    Solve();
    Write();
    return 0;
}