Mai intai trebuie sa te autentifici.
Cod sursa(job #1553860)
Utilizator | Data | 20 decembrie 2015 17:15:33 | |
---|---|---|---|
Problema | Loto | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.39 kb |
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("loto.in");
ofstream g("loto.out");
int n,v[101],nr;
long S;
typedef struct STR
{
int a,b,c;
long s;
};
STR sum[1000001];
void citire()
{
f>>n>>S;
for(int i=1;i<=n;i++)
f>>v[i];
}
void calc()
{
int Suma;
for(int i=1;i<=n;i++)
for(int j=i;j<=n;j++)
for(int k=j;k<=n;k++)
{
Suma=v[i]+v[k]+v[j];
//if(Suma<=S)
++nr;
sum[nr].s=Suma;
sum[nr].a=i;
sum[nr].b=j;
sum[nr].c=k;
}
}
int comp(STR a,STR b)
{
if(a.s < b.s)return 1;
return 0;
}
void afis(STR x, STR y)
{
g<<v[x.a]<<' '<<v[x.b]<<' '<<v[x.c]<<' '<<v[y.a]<<' '<<v[y.b]<<' '<<v[y.c];
}
void cautbin()
{
int i,j,mij,ok=0;
long s1,s2;
i=1;j=nr;
while(i<=j)
{
s1=sum[i].s;
s2=S-sum[i].s;
while(i<=j&&sum[j].s>s2)j--;
if(i>j)
{
g<<-1;
break;
}
if (sum[j].s!=s2)
{
i++;
continue;
}
afis(sum[i], sum[j]);break;
}
if (i>j) g<<-1;
}
int main()
{
citire();
calc();
sort(sum+1,sum+nr+1,comp);
/*for(int i=1;i<=nr;i++)
g<<sum[i].s<<" ";
*/
cautbin();
f.close();
g.close();
return 0;
}