Cod sursa(job #1434864)

Utilizator stefan_creastaStefan Creasta stefan_creasta Data 11 mai 2015 16:26:33
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <cstdio>
#include <algorithm>
using namespace std;
struct LOTO
{
	int sum;
	char i1,i2,i3;
};
LOTO v[1000001];
int q[101];
bool cmp ( LOTO a, LOTO b )
{
	return a.sum<b.sum;
}
int main()
{
    FILE *fin, *fout;;
    int n,s,i,j,k,med,found=-1;
    fin=fopen("loto.in","r");
    fscanf(fin,"%d%d",&n,&s);
    for(i=1;i<=n;++i)
		fscanf(fin,"%d",&q[i]);
	fclose(fin);
	int l=0;
	for(i=1;i<=n;++i)
		for(j=1;j<=n;++j)
			for(k=1;k<=n;++k)
	{
		++l;
		v[l].i1=i;
		v[l].i2=j;
		v[l].i3=k;
		v[l].sum=q[i]+q[j]+q[k];

	}
	sort(v+1,v+l+1,cmp);
	fout=fopen("loto.out","w");
	for(i=1;i<=l;++i)
		for(j=1;j<=l;++j)
			for(k=1;k<=l;++k)
	{
		int s1=s-(q[i]+q[j]+q[k]);
		int st=1,dr=l;
		while(st<=dr)
		{
			med=(st+dr)/2;
			if(v[med].sum==s1)
			{
				found=0;
				fprintf(fout,"%d %d %d %d %d %d",q[i],q[j],q[k],v[med].i1,v[med].i2,v[med].i3);
				return 0;
			}
			else
				if(v[med].sum<s1)
					st=med+1;
				else
					dr=med-1;
			}
		}
	if(found==-1)
		fprintf(fout,"%d",found);
	fclose(fout);
    return 0;
}