Pagini recente » Cod sursa (job #976010) | Cod sursa (job #2835236) | Cod sursa (job #597525) | Cod sursa (job #1358995) | Cod sursa (job #76205)
Cod sursa(job #76205)
# include <stdio.h>
const long int MAXN=1000;
const long int MAXM=10000;
long int x[MAXN+1],place[MAXM+1],a[MAXN+1],b[MAXN+1],n,m,p;
void citire()
{
FILE *f=fopen("nextseq.in","r");
fscanf(f,"%ld%ld%ld",&n,&m,&p);
long int i;
for (i=1;i<=n;i++) fscanf(f,"%ld",&x[i]);
for (i=1;i<=m;i++) fscanf(f,"%ld",&a[m-i+1]);
for (i=1;i<=p;i++) fscanf(f,"%ld",&b[p-i+1]);
fclose(f);
}
void quick(long int li, long int lf)
{
long int i=li,j=lf,ii=0,jj=-1,aux;
while (i<j)
{
if (x[i]>x[j])
{
aux=x[i];x[i]=x[j];x[j]=aux;
aux=ii;ii=-jj;jj=-aux;
}
i+=ii;j+=jj;
}
if (i-li>1) quick(li,i-1);
if (lf-i>1) quick(i+1,lf);
}
void scrie(long int sol)
{
FILE *g=fopen("nextseq.out","w");
fprintf(g,"%ld\n",sol);
fcloseall();
}
int main()
{
citire();
quick(1,n);
long int i,skip=0;
for (i=1;i<=n;i++)
if (i>1&&x[i-1]==x[i]) skip++;
else place[x[i]]=i-skip;
n-=skip;
for (i=1;i<=m;i++) a[i]=place[a[i]];
for (i=1;i<=p;i++) b[i]=place[b[i]];
for (i=1;i<=p;i++)
{
if (i<=m) b[i]-=a[i];
if (i==1) b[i]--;
if (b[i+1]>0)
while (b[i]<=0)
{
b[i]+=n;
b[i+1]--;
}
}
long int sol=0,pp;
for (i=1,pp=1;i<=p&&pp<=100;i++,pp*=n)
sol+=b[i]*pp;
scrie(sol);
return 0;
}