Nu aveti permisiuni pentru a descarca fisierul grader_test14.in
Cod sursa(job #1510156)
Utilizator | Data | 24 octombrie 2015 16:56:51 | |
---|---|---|---|
Problema | Loto | Scor | 5 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.52 kb |
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
struct numere{
int x,y,z,s1;
};
numere s[1000003];
bool functie(numere A, numere B)
{
if(A.s1<B.s1)
return 1;
else return 0;
}
int n,suma,a[102],p=1,st=1,dr,s2,poz1=0,poz2=0,mijloc,v[8],i,j,z,ok=0;
int main()
{
p=0;
ifstream f("loto.in");
ofstream g("loto.out");
f>>n>>suma;
for (i=1;i<=n;i++)
f>>a[i];
sort(a+1, a+n+1);
for (i=1;i<=n;i++)
for (j=i;j<=n;j++)
for (z=j;z<=n;z++){
p++;
s[p].x=a[i];
s[p].y=a[j];
s[p].z=a[z];
s[p].s1=a[i]+a[j]+a[z];
}
sort (s+1,s+p+1,functie);
//p--;
//dr=p;
st=1;
dr=p;
while (st<=dr){
mijloc=(st+dr)/2;
if (s[mijloc].s1<suma){
s2=suma-s[mijloc].s1;
poz1=mijloc;
for (i=1;i<=p;i++)
if (s[i].s1==s2){
poz2=i;
ok=1;
break;
}
if(ok==1)
break;
st=mijloc+1;
}
if (s[mijloc].s1>suma)
dr=mijloc-1;
}
if (ok==1){
v[1]=s[poz1].x;
v[2]=s[poz1].y;
v[3]=s[poz1].z;
v[4]=s[poz2].x;
v[5]=s[poz2].y;
v[6]=s[poz2].z;
sort (v+1,v+7);
for (i=1;i<7;i++)
g<<v[i]<<" ";
}
else
g<<-1;
return 0;
}