Pagini recente » Cod sursa (job #2815042) | Cod sursa (job #1087739) | Cod sursa (job #2889207) | Cod sursa (job #257166) | Cod sursa (job #58074)
Cod sursa(job #58074)
#include <stdio.h>
#include <memory.h>
#define NMAX 10100
int n, m, p;
int x[NMAX], a[NMAX], b[NMAX];
void read(int a[NMAX], int n)
{
int i;
for(n; n> 0; --n)
{
scanf("%d ", &a[n]);
}
}
int divide(int p, int q)
{
int st = p, dr = q;
int m = x[st];
while(st < dr)
{
while(st < dr && m <= x[dr]) --dr;
x[st] = x[dr];
while(st < dr && m >= x[st]) ++st;
x[dr] = x[st];
}
x[st] = m;
return st;
}
void qsort(int p, int q)
{
int m = divide(p, q);
if(m > p)
qsort(p, m-1);
if(m < q)
qsort(m+1, q);
}
void normalizeaza(int a[NMAX], int y)
{
int i;
int st, dr, m;
for(i = 1; i <= y; ++i)
{
st = 1;
dr = n;
while(st <= dr)
{
m = (st + dr)/2;
if(x[m] == a[i])
{
a[i] = m-1;
break;
}
else if(x[m] > a[i])
{
dr = m-1;
}
else
{
st = m+1;
}
}
}
}
void scadere(int a[NMAX], int b[NMAX])
{
int i, t;
long x = 0, pow = 1;
for(i = 1, t = 0; i <= m; ++i)
{
a[i] += (t = (a[i] -= b[i] + t) < 0) * n;
}
for(; m > 1 && !a[m]; --m);
for(i = 1; i <= m; ++i)
{
x += a[i] * pow;
pow *= n;
}
printf("%ld\n", --x);
}
int main()
{
freopen("nextseq.in", "r", stdin);
freopen("nextseq.out", "w", stdout);
scanf("%d %d %d\n", &n, &m, &p);
read(x, n);
read(a, m);
read(b, p);
/*
int i, ok = 1;
if(p == m)
for(i = 1; i <= n && ok; ++i)
if(a[i] != b[i])
ok = 0;
else ok = 0;
if(ok)
{
printf("0\n");
return 0;
}
*/
qsort(1, n);
normalizeaza(a, m);
normalizeaza(b, p);
/*if(m == 1 && a[1] == 0)
{
int pow = 1, i;
long xi= 0;
for(i = 1; i <= m; ++i)
{
xi += b[i] * pow;
pow *= n;
}
printf("%ld\n", xi);
return 0;
} */
/*int i, aux[NMAX];
memset(aux, 0, sizeof(aux));
for(i = p; i > 0; --i)
aux[i] = b[p-i+1];
memcpy(b, aux, sizeof(aux));
*/
//++a[p];
scadere(b, a);
fclose(stdin);
fclose(stdout);
return 0;
}