Pagini recente » Cod sursa (job #3213374) | Cod sursa (job #1831068) | Cod sursa (job #2860181) | Cod sursa (job #3238679) | Cod sursa (job #1592729)
#include<stdio.h>
#include<algorithm>
#include<math.h>
#include<iostream>
using namespace std;
int a[10010],b[10010],c[10010];
int ret,x,N,M,P;
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;
}
return -1;
}
void scadere() {
int carry = 0;
for(int i=1;i<=P;++i) {
int x = b[i]-a[i]+carry;
b[i] = (x+N)%N;
carry = (x+N)/N-1;
}
}
int main() {
// freopen("input.in","r",stdin);
freopen("nextseq.in","r",stdin);
freopen("nextseq.out","w",stdout);
scanf("%d%d%d",&N,&M,&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",&x);
a[M+1-i]=caut(x);
}
for(int i=1;i<=P;++i) {
scanf("%d",&x);
b[P+1-i]=caut(x);
}
if(M>P) {
printf("%d",0);
return 0;
}
if(M==P) {
int i;
for(i=M;i>=1;--i) {
if(a[i]!=b[i]) break;
}
if(a[i]>b[i]) {
printf("%d",0);
return 0;
}
}
scadere();
for(int i=P;i>=1;--i) {
ret = ret*N + b[i];
}
printf("%d",ret-1);
return 0;
}