Cod sursa(job #143272)

Utilizator RockManIzsak Istvan RockMan Data 26 februarie 2008 10:17:41
Problema Loto Scor 25
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.73 kb
#include<stdio.h>
long e[101][7]={0},s,m[7][2]={0},mx=0;
int n,meg=0;
void beolvas()
{
	FILE *f=fopen("loto.in","r");
	fscanf(f,"%d%ld",&n,&s);
	for(int i=1;i<=n;i++)
		fscanf(f,"%ld",&e[i][0]);
	fclose(f);
}
void kiir()
{
	FILE *f=fopen("loto.out","w");
	int i,j;
	if(meg)
	{
		int h=0;
		for(i=1;i<=mx;i++)
			for(j=1;j<=m[i][1];j++)
			{
				h++;
				if(h<6) fprintf(f,"%ld ",m[i][0]);
				else fprintf(f,"%ld",m[i][0]);
			}
	}
	else fprintf(f,"-1");
	fclose(f);
}
void megold()
{
	int i,j,k,x,y,z,l,o,a1,a2;
	for(i=1;i<=n;i++)
		for(j=1;j<=6;j++)
			e[i][j]=j*e[i][0];
	long sum;

//egy elem 6szor

	for(i=1;i<=n;i++)
		if(e[i][6]==s)
		{
			mx=1;
			m[1][0]=e[i][0];
			m[1][1]=6;
			meg=1;
			return;
		}

	if(n==1) return;
//ket elem 1,5 2,4 3,3 szor

	for(i=1;i<=n-1;i++)
		for(j=i+1;j<=n;j++)
		{
			if(e[i][1]+e[j][5]==s)
			{
				mx=2;
				m[1][0]=e[i][1];
				m[1][1]=1;
				m[2][0]=e[j][1];
				m[2][1]=5;
				meg=1;
				return;
			}
			if(e[i][5]+e[j][1]==s)
			{
				mx=2;
				m[1][0]=e[i][1];
				m[1][1]=5;
				m[2][0]=e[j][1];
				m[2][1]=1;
				meg=1;
				return;
			}
			if(e[i][2]+e[j][4]==s)
			{
				mx=2;
				m[1][0]=e[i][1];
				m[1][1]=2;
				m[2][0]=e[j][1];
				m[2][1]=4;
				meg=1;
				return;
			}
			if(e[i][4]+e[j][2]==s)
			{
				mx=2;
				m[1][0]=e[i][1];
				m[1][1]=4;
				m[2][0]=e[j][1];
				m[2][1]=2;
				meg=1;
				return;
			}
			if(e[i][3]+e[j][3]==s)
			{
				mx=2;
				m[1][0]=e[i][1];
				m[1][1]=3;
				m[2][0]=e[j][1];
				m[2][1]=3;
				meg=1;
				return;
			}
		}
	if(n==2) return;
//harom elem 1,2,3  1,1,4  2,2,4  2,2,2
	for(i=1;i<=n-2;i++)
		for(j=i+1;j<=n-1;j++)
			for(k=j+1;k<=n;k++)
			{
				for(x=1;x<=3;x++)
				for(y=1;y<=3;y++)
				for(z=1;z<=3&&x+y<6;z++)
					if(x+y+z==6)
						if(e[i][x]+e[j][y]+e[k][z]==s)
						{
							mx=3;
							m[1][0]=e[i][1];
							m[2][0]=e[j][1];
							m[3][0]=e[k][1];
							m[1][1]=x;
							m[2][1]=y;
							m[3][1]=z;
							meg=1;
							return;
						}
			}
	if(n==3) return;
//negy elem 1,1,1,3  1,1,2,2
	for(i=1;i<=n-3;i++)
	for(j=i+1;j<=n-2;j++)
	for(k=j+1;k<=n-1;k++)
	for(l=k+1;l<=n;l++)
	{
		for(x=1;x<=4;x++)
		for(y=1;y<=4;y++)
		for(z=1;z<=4&&x+y<6;z++)
		for(a1=1;a1<=4&&x+y+z<6;a1++)
			if(x+y+z+a1==6)
				if(e[i][x]+e[j][y]+e[k][z]+e[l][a1]==s)
				{
					mx=4;
					m[1][0]=e[i][1];
					m[2][0]=e[j][1];
					m[3][0]=e[k][1];
					m[4][0]=e[l][1];
					m[1][1]=x;
					m[2][1]=y;
					m[3][1]=z;
					m[4][1]=a1;
					meg=1;
					return;
				}
	}
	if(n==4) return;
//ot elem
	for(i=1;i<=n-4;i++)
	for(j=i+1;j<=n-3;j++)
	for(k=j+1;k<=n-2;k++)
	for(l=k+1;l<=n-1;l++)
	for(o=l+1;o<=n;o++)
	{
		for(x=1;x<=5;x++)
		for(y=1;y<=5;y++)
		for(z=1;z<=5&&x+y<6;z++)
		for(a1=1;a1<=5&&x+y+z<6;a1++)
		for(a2=1;a2<=5&&x+y+z+a1<6;a2++)
			if(x+y+z+a1+a2==6)
				if(e[i][x]+e[j][y]+e[k][z]+e[l][a1]+e[o][a2]==s)
				{
					mx=5;
					m[1][0]=e[i][1];
					m[2][0]=e[j][1];
					m[3][0]=e[k][1];
					m[4][0]=e[l][1];
					m[5][0]=e[o][1];
					m[1][1]=x;
					m[2][1]=y;
					m[3][1]=z;
					m[4][1]=a1;
					m[5][1]=a2;
					meg=1;
					return;
				}

	}
	if(n==5) return;
//hat elem
	int p;
	for(i=1;i<=n-5;i++)
	for(j=i+1;j<=n-4;j++)
	for(k=j+1;k<=n-3;k++)
	for(l=k+1;l<=n-2;l++)
	for(o=l+1;o<=n-1;o++)
	for(p=o+1;p<=n;p++)
	{
		if(e[i][1]+e[j][1]+e[k][1]+e[l][1]+e[o][1]+e[p][1]==s)
		{
			meg=1;
			mx=6;
			m[1][0]=e[i][1];
			m[2][0]=e[j][1];
			m[3][0]=e[k][1];
			m[4][0]=e[l][1];
			m[5][0]=e[o][1];
			m[6][0]=e[p][1];
			m[1][1]=1;
			m[2][1]=1;
			m[3][1]=1;
			m[4][1]=1;
			m[5][1]=1;
			m[6][1]=1;
			return;
		}
	}
}
int main()
{
	beolvas();
	megold();
	kiir();
	return 0;
}