Cod sursa(job #196181)

Utilizator nusmaibunkeleviprofesor cicalescu nusmaibunkelevi Data 24 iunie 2008 20:11:14
Problema NextSeq Scor 15
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include<stdio.h>
#define NMAX 10000

int main(){
freopen("nextseq.in","r",stdin);
freopen("nextseq.out","w",stdout);
int n,m,p,i,j,k,nr=0,nr1=1,max=0,min=10000,dif,gasit;
int x[NMAX],a[NMAX],b[NMAX],c[NMAX+1]={0},pp[NMAX]={1};
scanf("%d%d%d",&n,&m,&p);
for(i=0;i<n;++i) {
	scanf("%d",&x[i]);
	if(max<x[i]) max=x[i];
	if(min>x[i]) min=x[i];
	}
for(i=0;i<m;++i) scanf("%d",&a[i]);
for(i=0;i<p;++i) scanf("%d",&b[i]);
for(i=0;i<n;++i) c[x[i]]=1;
k=0;
for(i=min;i<=max;++i)
	if(c[i]) {c[i]=k;k++;}
for(i=1;i<p;++i) pp[i]=pp[i-1]*n;
if(m<p){
	gasit=0;
	for(i=0;i<m;++i){
		dif=c[max]-c[a[i]];
		if(dif) {nr1=nr1*dif;gasit=1;}
		}
	if(gasit) nr+=nr1;
	nr1=0;
	for(i=0;i<p;++i){
		dif=c[b[i]]-c[min];
		if(dif) nr1=nr1+pp[p-i-1]*dif;
		}
	nr+=nr1;
	}
if(m==p){
	gasit=0;
	nr1=1;
	for(i=0;i<m;++i){
		dif=c[b[i]]-c[a[i]];
		if(dif>0) {nr1=nr1*dif;gasit=1;}
		}
	if(gasit) nr+=nr1;
	}
printf("%d",nr);
return 0;
}