Cod sursa(job #275282)

Utilizator runnaway90Oprescu Radu Constantin runnaway90 Data 10 martie 2009 12:45:56
Problema NextSeq Scor 95
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include<stdio.h>
#include<algorithm>
#define M 10006

using namespace std;

int a[M], b[M], c[M], nr[M], n, m, p, i, r, j, q, poz;

char e[2000000];

int main()
{int r, s, w;
	freopen("nextseq.in","r",stdin);
	freopen("nextseq.out","w",stdout);

    scanf("%d %d %d\n", &n, &m, &p);

	gets(e); w = strlen(e);

	r = 0;
	for (i = 0; i < w; ++i){
	    s = 0;
        while (e[i] >= '0' && e[i] <= '9') s *= 10, s +=e[i]- '0', ++i;
        a[++r] = s;
	}
	sort(a+1, a+n+1);

     for (i = 1; i <= n; ++i) nr[a[i]] = i-1;

	r = 0;
    gets(e); w = strlen(e);

	for (i = 0; i < w; ++i){
	    s = 0;
        while (e[i] >= '0' && e[i] <= '9') s *= 10, s += e[i]- '0', ++i;
        b[++r] = nr[s];
	}
    r = 0;
    gets(e); w = strlen(e);

	for (i = 0; i < w; ++i){
	    s = 0;
        while (e[i] >= '0' && e[i] <= '9') s *= 10, s +=e[i]- '0', ++i;
        c[++r] = nr[s];
    }

	b[0] = m; c[0] = p;

	for(j = 1; ; ++j)
	{
		for (i = b[0]; b[i] == n-1; --i);
		if (i){
			b[i]++;
			for (q = i+1; q <= b[0]; ++q) b[q] = 0;
		}
		else
		{
			b[0]++;
			for (q = 1; q <= b[0]; ++q) b[q] = 0;
		}
		if (b[0] < c[0]);
		else
			if (b[0] > c[0]) break;
			else{
				i = 1;
				while (b[i] == c[i]) ++i;
				if (b[i] >= c[i]) break;
			}
	}
	printf("%d",j-1);

	return 0;
}