Cod sursa(job #132611)

Utilizator katakunaCazacu Alexandru katakuna Data 6 februarie 2008 11:13:00
Problema NextSeq Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.98 kb
#include<stdio.h>
long int j3,t[10001],n,m,p,i,v[10001],ok,j,putere,N,M,j2,nr;


void cre(long int *v, long int n){
  long int i,aux,c,p;
  for (i=2;i<=n;i++) {
//introduc v[i] in heap
    c = i;
    p = i>>1;
    while ((p)&&(v[c]>v[p])) {
      aux = v[c];
      v[c] = v[p];
      v[p] = aux;
      c = p;
      p = p>>1;
    }
  }
}

void corect(long int poz, long int *v, long int n){
  long int aux,p,c;
//  aux = v[1];
//  v[1] = v[i];
//  v[i] = aux;
  p = poz;
  c = p<<1;
  while (c<=n) {
    if ((c+1<=n) && (v[c+1]>v[c]))
      c++;
    if (v[c]>v[p]) {
      aux = v[c];
      v[c] = v[p];
      v[p] = aux;
      p = c;
      c = p<<1;
    } else break;
  }

}

void s(long int *v, long int n) {
  long int i,aux,p,c;
  cre(v,n);
  for (i=n;i>1;i--) {
    aux = v[1];
    v[1] = v[i];
    v[i] = aux;
    corect(1,v,i-1);
  }
}



int main(){

FILE *f=fopen("nextseq.in","r");
fscanf(f,"%d %d %d",&n,&m,&p);

  for(i=1;i<=n;i++){
  fscanf(f,"%d",&v[i]);
  }

 s(v,n);



  for(i=1;i<=n;i++){
  t[v[i]]=i-1;;
  }

 if(p!=m){

  putere=1;
   for(i=1;i<=m;i++){
   fscanf(f,"%d",&v[i]);
   }

    for(i=m;i>=1;i--){
    j=v[i];
    M+=t[j]*putere;
    putere*=n;
    }

   nr+=(putere-M-1);
   j2=putere;

   putere=1;
   for(i=1;i<=p;i++){
   fscanf(f,"%d",&v[i]);
   }

    for(i=p;i>=1;i--){
    j=v[i];
    N+=t[j]*putere;
    putere*=n;
    }

   nr+=N;


  putere=j2;

    for(i=m+1;i<=p-1;i++){
    putere*=n;
    nr+=putere;
    }

 }

    else{

    for(i=1;i<=m;i++){
    fscanf(f,"%d",&v[i]);
    }

    putere=1;
    for(i=m;i>=1;i--){
    j=v[i];
    M+=t[j]*putere;
    putere*=n;
    }


    putere=1;
    for(i=1;i<=p;i++){
    fscanf(f,"%d",&v[i]);
    }

    for(i=p;i>=1;i--){
    j=v[i];
    N+=t[j]*putere;
    putere*=n;
    }

    nr=N-M-1;
    }


fclose(f);

 FILE *g=fopen("nextseq.out","w");
 fprintf(g,"%d",nr);
 fclose(g);

return 0;
}