Cod sursa(job #201509)

Utilizator ciprianfFarcasanu Alexandru Ciprian ciprianf Data 1 august 2008 09:40:27
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <stdio.h>          
#include <algorithm>
using namespace std;
int n,s;
int v[105],a[1000005];
bool caut(int x){
	int st=1,dr=a[0],m;
	while(st<dr){
		m=(st+dr)/2;
		else if(a[m]<=x) st=m+1;
		else dr=m;
	}
	if(a[st]==x) return true;
	return false;
}
int main(){
	int i,j,k,s1=-1,s2=-1,x1=0,x2=0,x3=0,x4=0,x5=0,x6=0;
	int gasit1=0,gasit2=0;
	freopen("loto.in","r",stdin);
	freopen("loto.out","w",stdout);
	scanf("%d%d",&n,&s);
	for(i=1;i<=n;i++)
		scanf("%d",&v[i]);
	for(i=1;i<=n;i++)
		for(j=i;j<=n;j++)
			for(k=j;k<=n;k++)
				if(v[i]+v[j]+v[k]<s) 
					a[++a[0]]=v[i]+v[j]+v[k];
	sort(a+1,a+a[0]+1);
	for(i=1;i<=a[0];i++)
		if(caut(s-a[i])) {
			s1=a[i];
			s2=s-a[i];
			break;
		}
	if(s1==-1) {
		printf("-1\n");
		return 0;
	}
	for(i=1;i<=n && (!x1 || !x4);i++)
		for(j=i;j<=n && (!x1 || !x4);j++)
			for(k=j;k<=n && (!x1 || !x4);k++){
				if(v[i]+v[j]+v[k]==s1 && !gasit1){
					x1=v[i];x2=v[j];x3=v[k];gasit1=1;
				}
				if(v[i]+v[j]+v[k]==s2 && !gasit2){
					x4=v[i];x5=v[j];x6=v[k]; gasit2=1;
				}
			}
	printf("%d %d %d %d %d %d\n",x1,x2,x3,x4,x5,x6);
}