Cod sursa(job #2785395)
Utilizator | Data | 18 octombrie 2021 17:14:12 | |
---|---|---|---|
Problema | Loto | Scor | 40 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva de probleme | Marime | 1.96 kb |
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("loto.in");
ofstream out("loto.out");
int n,mid,st,dr,S,v[101],vs[1000001],St,e=0,ok=0,r;
int main()
{
in>>n>>S;
for(int i=1;i<=n;i++)
in>>v[i];
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
for(int t=1;t<=n;t++)
vs[e++]=v[i]+v[j]+v[t];
}
}
sort(vs,vs+e);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
for(int k=1;k<=n;k++)
{
St=S-v[i]-v[j]-v[k];
st=0;
dr=e-1;
while(st<=dr)
{
mid=(st+dr)/2;
if(St>vs[mid])
st=mid+1;
else if(St<vs[mid])
dr=mid-1;
else
{
ok=1;
r=St;
break;
}
}
}
}
}
if(ok==0)
out<<-1;
else
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
for(int k=1;k<=n;k++)
if(r==v[i]+v[j]+v[k])
{
out<<v[i]<<" "<<v[j]<<" "<<v[k]<<" ";
i=n+1;
j=n+1;
break;
}
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
for(int k=1;k<=n;k++)
if(S-r==v[i]+v[j]+v[k])
{
out<<v[i]<<" "<<v[j]<<" "<<v[k]<<" ";
i=n+1;
j=n+1;
break;
}
}
}
}
return 0;
}