Cod sursa(job #9615)

Utilizator kostefbobocescu kesikis stefan kostef Data 27 ianuarie 2007 16:25:26
Problema Secventa 5 Scor 0
Compilator cpp Status done
Runda Unirea 2007, clasele 11-12 Marime 1.05 kb
#include<fstream.h>
#include<conio.h>
#include<math.h>
#define limit 1050000
ifstream f("secv5.in");
ofstream g("secv5.out");
long j,k,tot[3],cf,a[limit],b[limit],n,i,l,u,m;
int v[limit],cont;
int main()
{
tot[0]=tot[1]=tot[2]=0;
f>>n>>l>>u;
f>>a[1];
b[1]=1;
j=1;
cf=0;
for (i=2;i<=n;i++)
{  f>>a[i];
	if (a[i]==a[i-1])
	{	b[j]++;
		i--;
		n--;
	}
	else
	{  b[++j]++;

	}
}
for(i=1;i<=j;i++)
{  cont=1;
	for(k=0;k<=j/32;k++)
		v[k]=0;
	v[a[i]/32]+=(1<<(a[i]%32));
	for(k=1;cont<=u && i+k<=j;k++)
	{
		if(((	v[a[i+k]/32]	)&(	1<<a[i+k]))==0)
		{	cont++;
			v[a[i+k]/32]+=(1<<(a[i+k]%32));
		}

		if (cont>=l && cont<=u)
		{ 	cf=cf+b[i]*b[i+k];
		}
	}
	tot[1]+=cf;
	if (tot[1]>=100000000)
	{   tot[2]+=tot[1]/1000000000;
		 tot[1]=tot[1]%1000000000;
	}
}
i=1;j=1;
if(tot[2]==0)
{	g<<tot[1];
}
else
{  cont=0;
	g<<tot[2];long z=1000000000;
	for(z; z!=0  ;z=z/10, cont++)
		if (tot[1]/z!=0)
		{
		for (j=1;j<cont;j++)
			g<<0;
		g<<tot[1];
		break;
		}

}
return 0;
}