Cod sursa(job #1165742)
| Utilizator | Data | 2 aprilie 2014 21:27:51 | |
|---|---|---|---|
| Problema | Loto | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 1.51 kb |
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("loto.in");
ofstream out("loto.out");
int v[101],suma[1000001],n,i,j,k;
void f(int sc)
{
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]==sc)
{
out<<v[i]<<' '<<v[j]<<' '<<v[k]<<'\n';
return;
}
}
}
}
}
int main()
{
int s,l,pas,c,sc;
in>>n>>s;
for(i=1;i<=n;i++)
in>>v[i];
sort(v+1,v+n+1);
c=1;
for(i=1;i<=n;i++)
{
for(j=i;j<=n;j++)
{
for(k=j;k<=n;k++)
{
suma[c] =v[i]+v[j]+v[k];
c++;
}
}
}
sort(suma+1,suma+c);
for(i=1;i<=n;i++)
{
for(j=i;j<=n;j++)
{
for(k=j;k<=n;k++)
{
sc=s-v[i]-v[j]-v[k];
l=0;
pas = 1 << 19;
while(pas)
{
if(l+pas<c&&suma[l+pas]<sc)
l+=pas;
pas /= 2;
}
if(suma[l + 1] == sc)
{
out<<v[i]<<' '<<v[j]<<' '<<v[k]<<' ';
f(sc);
return 0;
}
}
}
}
out<<-1<<'\n';
return 0;
in.close();
out.close();
}
