Pagini recente » Cod sursa (job #2795769) | Cod sursa (job #2906419) | Cod sursa (job #2503743) | Cod sursa (job #2062676) | Cod sursa (job #217705)
Cod sursa(job #217705)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin ("loto.in");
ofstream fout ("loto.out");
struct loto
{
int a,S;
};
int sir[105];
loto sume[210];
int n,s,k;
int nr=0;
void citire()
{
fin>>n>>s;
for (int i=0;i<n;i++)
fin>>sir[i];
sort(sir,sir+n);
}
void poz(int li,int ls,int &k)
{
int i=li,j=ls,i1=0,j1=-1;
int aux;
loto aux1;
while (i<j)
{
if (sume[i].S>sume[j].S)
{
aux1=sume[i];
sume[i]=sume[j];
sume[j]=aux1;
aux=i1;
i1=-j1;
j1=-aux;
}
i+=i1;
j+=j1;
}
k=i;
}
void qsort(int li,int ls)
{
if (li<ls)
{
poz(li,ls,k);
qsort(li,k);
qsort(k+1,ls);
}
}
void su()
{
nr=1;
for (int i=1;i<=n;i++)
for (int j=i;j<=n;j++)
{
sume[nr].S=i+j;
sume[nr++].a=i;
}
qsort(1,nr-1);
}
int cauta(int x)
{
int s=1,d=nr,mij,val;
while (d-s>=1)
{
mij=(s+d)>>1;
val=sume[mij].S;
if (val==x)
return mij;
if (val<x)
s=mij+1;
else
d=mij;
}
return -1;
}
void calcul()
{
int c;
for (int i=1;i<=nr;i++)
for (int j=1;j<=nr;j++)
{
c=cauta(s-sume[i].S-sume[j].S);
if (c!=-1)
{
fout<<sume[i].a<<" ";
fout<<sume[i].S-sume[i].a<<" ";
fout<<sume[j].a<<" ";
fout<<sume[j].S-sume[j].a<<" ";
fout<<sume[c].a<<" ";
fout<<sume[c].S-sume[c].a<<" ";
return ;
}
}
fout<<-1;
}
int main ()
{
citire();
su();
calcul();
return 0;
}