Cod sursa(job #344310)

Utilizator tamas_iuliaTamas Iulia tamas_iulia Data 29 august 2009 17:02:51
Problema NextSeq Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <stdio.h>
#include <algorithm>
#define Nmax 10005
using namespace std;

int a[Nmax],b[Nmax],v[Nmax],next[Nmax];
int n,m,p,mx;

void reverse(int a[]){
	for(int i=1,aux; i<=a[0]/2; ++i) aux=a[i], a[i]=a[a[0]-i+1], a[a[0]-i+1]=aux;
}

void read(){
	int i;
	freopen("nextseq.in","r",stdin);
   freopen("nextseq.out","w",stdout);
   scanf("%d%d%d",&n,&m,&p);
   a[0]=m; b[0]=p;
   for(i=1;i<=n;++i) scanf("%d",&v[i]), mx=max(mx,v[i]);
   for(i=1;i<=m;++i) scanf("%d",&a[i]);
   reverse(a);
   for(i=1;i<=p;++i) scanf("%d",&b[i]);
   reverse(b);
   sort(v+1,v+n+1);
   for(i=2;i<=n;++i) next[v[i-1]]=v[i];
   next[v[n]]=v[1];
}

void do_next(int x){
	if(x>a[0]){ a[++a[0]]=v[1]; }
   else
	if(a[x] == mx){
   	a[x]=next[a[x]];
      do_next(x+1);
   }
   else a[x] = next[a[x]];
}

int compar(int a[],int b[]){
	int i;
   if(a[0] > b[0]) return 1;
   if(a[0] < b[0]) return 0;
   for(i=a[0];i>=1;--i)
     if(a[i] > b[i]) return 1;
     else
     if(a[i] < b[i]) return 0;
   return 1; // tre sa fie strict mai mic
}

void work(){
	int ok,nr=0;
   ok = compar(a,b);
   while( !ok ){  // a<b
   	do_next(1);
      ok = compar(a,b);
      nr += !ok;
   }
   printf("%d\n",nr);
   fclose(stdin); fclose(stdout);
}

int main(){
	read();
   work();
   return 0;
}