Cod sursa(job #1320088)

Utilizator mateidanutDanut Gabriel Matei mateidanut Data 17 ianuarie 2015 16:26:45
Problema NextSeq Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <fstream>
using namespace std;

ifstream f("nextseq.in");
ofstream g("nextseq.out");

int a[10001], b[10001], x[10001], A[10001], B[10001], n, m, p, i, j, nr, y, z, s;

void BTab(int k)
{	if (k==m+1) ++s;
	else
	{	for (int i=a[k]; i<=b[k]; ++i)
		{	A[k]=i;
			BTab(k+1);
		}
	}
}

void BTa(int k)
{	if (k==m+1) ++s;
	else
	{	for (int i=a[k]; i<=nr; ++i)
		{	A[k]=i;
			BTa(k+1);
			a[k]=1;
		}
	}
}

void BTb(int k)
{	if (k==p+1)	++s;
	else
	{	for (int i=b[k]; i>=1; --i)
		{	B[k]=i;
			BTb(k+1);
			b[k]=nr;
		}
	}
}

int main()
{	f>>n>>m>>p;
	for (i=1; i<=n; ++i)
	{	f>>y;
		x[y]=1;
	}
	for (i=1; i<=10000; ++i)
		if (x[i]==1) x[i]=++nr;
	for (i=1; i<=m; ++i)
	{	f>>y;
		a[i]=x[y];
	}
	for (i=1; i<=p; ++i)
	{	f>>y;
		b[i]=x[y];
	}
	if (m>p) g<<0;
	else
	{	for (i=m+1; i<=p-1; ++i)
		{	y=i;
			while (y)
			{	++z;
				y=y/10;
			}
			y=1;
			for (j=1; j<=z; ++j) y*=nr;
			s+=y;
		}
		if (m==p) BTab(1);
		else
		{	BTa(1);
			BTb(1);
		}
	}
	g<<s-2;
    return 0;
}