Pagini recente » Cod sursa (job #2542038) | Cod sursa (job #2512512) | Cod sursa (job #1735293) | Cod sursa (job #2426050) | Cod sursa (job #48449)
Cod sursa(job #48449)
/*
*
*
infoarena 2.0 - Arhiva - NextSeq
*
*
*/
#include<stdio.h>
#include<math.h>
#define INPUT "nextseq.in"
#define OUTPUT "nextseq.out"
FILE *fin=fopen(INPUT, "r"),*fout=fopen(OUTPUT, "w");
long n,m,p,sir[10001],a[10001],b[10001],vec[10001],vec2[10001],pozitie[10001];
void citire();
void quick(long st, long dr);
void seteazavec();
void calcprimu();
void calculdoilea();
void finalizeaza();
int main()
{
citire();
quick(1,n);
seteazavec();
calcprimu();
calculdoilea();
finalizeaza();
fclose(fin);
fclose(fout);
return 0;
}
void citire()
{
fscanf(fin, "%ld %ld %ld", &n, &m, &p);
for(long i=1;i<=n;++i)
fscanf(fin, "%ld", &sir[i]);
for(long i=1;i<=m;++i)
fscanf(fin, "%ld", &a[i]);
for(long i=1;i<=p;++i)
fscanf(fin, "%ld", &b[i]);
}
void quick(long st, long dr)
{
long l=st,m=dr;
while(l!=m)
{
if((l<m&&sir[l]>sir[m])||(l>m&&sir[l]<sir[m]))
{
sir[l]=sir[l]+sir[m];
sir[m]=sir[l]-sir[m];
sir[l]=sir[l]-sir[m];
l=l+m;
m=l-m;
l=l-m;
if(l<m)
--m;
else
++m;
}
else
if(l<m)
--m;
else
++m;
}
if(l!=st) quick(st,l-1);
if(l!=dr) quick(l+1,dr);
}
void seteazavec()
{
for(long i=1;i<=n;++i)
pozitie[sir[i]]=i;
}
void calcprimu()
{
for(long i=n;i>m;--i)
vec[i]=0;
for(long i=m;i>=1;--i)
vec[i]=pozitie[a[m-i+1]];
}
void calculdoilea()
{
for(long i=n;i>p;--i)
vec2[i]=0;
for(long i=p;i>=1;--i)
vec2[i]=pozitie[b[p-i+1]];
}
void finalizeaza()
{
long long numar=0,total=0;
for(long i=1;i<=n||i<=m||i<=p;++i)
{
numar=vec2[i]-vec[i];
if(numar!=0)
total=total+numar*pow(n,i-1);
}
fprintf(fout, "%lld\n", total-1);
}