Pagini recente » Cod sursa (job #537248) | Cod sursa (job #3276991) | Cod sursa (job #1686378) | Cod sursa (job #2699491) | Cod sursa (job #360747)
Cod sursa(job #360747)
#include <stdio.h>
#include <stdlib.h>
#define MAXN 10000
int n, m, p;
int contor;
int A[MAXN + 1];
int B[MAXN + 1];
int X[MAXN + 1];
int T[MAXN + 1];
int compare (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
void citeste()
{
FILE* fi = fopen("nextseq.in", "r");
int i, aux;
//citim n, m, p
fscanf(fi, "%d%d%d", &n, &m, &p);
//citesc elementele multimii X
for(i = 0; i < n; ++i) fscanf(fi, "%d", &X[i]);
qsort(X, n, sizeof(int), compare);
//transform elementele lui X in cifre in baza n
for(i = 0; i < n; ++i) T[X[i]] = i + 1;
//citesc elementele multimii A, transformandu-le in echivalentul in baza n
for(i = 0; i < m; ++i)
{
fscanf(fi, "%d", &aux);
A[m - i - 1] = T[aux];
}
//citesc elementele multimii B, transformandu-le in echivalentul in baza n
for(i = 0; i < p; ++i)
{
fscanf(fi, "%d", &aux);
B[p - i - 1] = T[aux];
}
fclose(fi);
}
int verifica()
{
if(m < p) return 0;
for(int i = 0; i < m; ++i)
if(A[i] != B[i])
return 0;
return 1;
}
void plus()
{
int poz = 0;
while(A[poz] == n)
A[poz++] = 1;
if(A[poz] == 0)
m++;
A[poz]++;
}
void rezolva()
{
while(!verifica())
{
contor++;
plus();
}
contor--;
}
void scrie()
{
FILE* fo = fopen("nextseq.out", "w");
fprintf(fo, "%d\n", contor);
fclose(fo);
}
int main()
{
citeste();
rezolva();
scrie();
return 0;
}