Cod sursa(job #201504)

Utilizator ciprianfFarcasanu Alexandru Ciprian ciprianf Data 1 august 2008 09:28:52
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 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;
		if(a[m]<=x) dr=m;
		else st=m+1;
	}
	if(a[m]==x) return true;
	return false;
}
int main(){
	int i,j,k,s1=0,s2=0,x1,x2,x3,x4,x5,x6;
	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) 
					continue;
				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 && !s2) {
		printf("-1");
		return 0;
	}
	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]==s1){
					x1=v[i];x2=v[j];x3=v[k];
				}
				if(v[i]+v[j]+v[k]==s2){
					x4=v[i];x5=v[j];x6=v[k];
				}
			}
	printf("%d %d %d %d %d %d",x1,x2,x3,x4,x5,x6);
}