Pagini recente » Cod sursa (job #3247426) | Cod sursa (job #655830) | Cod sursa (job #830222) | Cod sursa (job #2243680) | Cod sursa (job #1451450)
#include<stdio.h>
#include<algorithm>
#include<math.h>
using namespace std;
int a[10010],b[10010],c[10010],N,M,P,ret;
int caut(int x)
{
int st=1;
int dr=N;
while(st<=dr)
{
int mij=(st+dr)/2;
if(c[mij]>x)
dr=mij-1;
if(c[mij]<x)
st=mij+1;
if(c[mij]==x)
return mij;
}
}
void scadere()
{
int carry=0;
for(int i=1;i<=b[0];++i)
{
int x=b[i]-a[i]+carry;
b[i]=(x+N)%N;
carry=(x+N)/N-1;
}
}
int main()
{
freopen("nextseq.in","r",stdin);
freopen("nextseq.out","w",stdout);
scanf("%d%d%d",&N,&M,&P);
a[0]=M;
b[0]=P;
for(int i=1;i<=N;++i)
scanf("%d",&c[i]);
sort(c+1,c+N+1);
for(int i=1;i<=M;++i)
{
scanf("%d",&a[M+1-i]);
a[M+1-i]=caut(a[M+1-i]);
}
for(int i=1;i<=P;++i)
{
scanf("%d",&b[P+1-i]);
b[P+1-i]=caut(b[P+1-i]);
}
if(a[0]>b[0])
{
printf("%d",0);
return 0;
}
if(a[0]==b[0])
{
int i;
for(i=a[0];i>=1;--i)
if(a[i]!=b[i])
break;
if((a[i]>b[i])||((a[1]==b[1])&&(i==1)))
{
printf("%d",0);
return 0;
}
}
scadere();
for(int i=b[0];i>=1;--i)
ret=ret*N+b[i];
printf("%d",ret-1);
return 0;
}