Cod sursa(job #458948)

Utilizator andu.andr3yBoznea Andrei andu.andr3y Data 27 mai 2010 10:17:40
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <stdio.h> 
#include <algorithm> 
#include <vector> 
#include <set> 
#define FOR(i,a,b) for(i=a;i<=b;++i) 
#define MAXN 101 
using namespace std; 
struct resz 
{        
int val;        
int x,y,z; 
}temp; 
struct reszcomp 
{ 
bool operator ()(const resz& a,const resz& b) const       
{return a.val < b.val;} 
};
int n,i,j,k,s,x; 
int v[MAXN]; 
vector<resz> a; 
set<resz,reszcomp> b; 
set<resz>::iterator it; 
int cmp(resz a,resz b) 
{     
return (a.val < b.val); 
} 
 
 int keres(int x) 
{ 
if (x <= 0) return -1; 
int bal = 0,jobb = a.size()-1,kozep;     
while (bal <= jobb) 
{ 
kozep = (bal+jobb)/2;           
if (a[kozep].val < x) bal = kozep+1; else          
if (a[kozep].val > x) jobb = kozep-1;  
else return kozep; 
}
return -1; 
} 
int main() 
{ 
freopen("loto.in","r",stdin); 
freopen("loto.out","w",stdout); 
scanf("%d %d\n",&n,&s); 
FOR (i,1,n) 
scanf("%d\n",&v[i]); 
FOR (i,1,n) 
FOR (j,i,n) 
FOR (k,j,n) 
{ 
temp.val = v[i]+v[j]+v[k]; 
temp.x = i; 
temp.y = j; 
temp.z = k; 
//a.push_back(temp); 
b.insert(temp); 
} 
//sort(a.begin(),a.end(),cmp); 
FOR (i,1,n) 
FOR (j,i,n) 
FOR (k,j,n) 
{ 
temp.val = (s-(v[i]+v[j]+v[k])); 
it = b.lower_bound(temp); 
//x = keres(s-(v[i]+v[j]+v[k])); 
if ((*it).val == (s-(v[i]+v[j]+v[k]))) 
{ 
printf("%d %d %d %d %d %d\n",v[i],v[j],v[k],v[(*it).x],v[(*it).y],v[(*it).z]); 
return 0; 
} 
} 
printf("-1\n"); 
return 0; 
}