Cod sursa(job #1434877)

Utilizator stefan_creastaStefan Creasta stefan_creasta Data 11 mai 2015 16:41:30
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 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");
	int s1;
	for(i=1;i<=l;++i)
	{
		s1=s-v[i].sum;

		int st=1,dr=l;
		while(st<=dr)
		{
			med=(st+dr)/2;
			if(v[med].sum==s1&&med!=i)
			{
				found=0;
				fprintf(fout,"%d %d %d %d %d %d",v[i].i1,v[i].i2,v[i].i3,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;
}