Cod sursa(job #1257696)

Utilizator VladTiberiuMihailescu Vlad Tiberiu VladTiberiu Data 8 noiembrie 2014 09:37:12
Problema Loto Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <fstream>
#include <algorithm>
#define Ve 103
#define Ve2 1000003
using namespace std;
ifstream f("loto.in");
ofstream g("loto.out");
struct asd
{
    int s,n1,n2,n3;
}v[Ve2];
int a[Ve],n,s,k,i,j,r,s1;
int caut(asd b[Ve2],int x,int left, int right)
{   int mij;
    while(left <= right){
        mij = (left + right)/2;
        if(b[mij].s == x)
            return mij;
        else
        if(b[mij].s < x)
            left = mij +1;
        else
        if(b[mij].s > x)
            right = mij - 1;
    }
    return 0;
}
int cmp( const asd &z, const asd &m){
    if(z.s < m.s)
        return 1;
    return 0;
}
int main()
{
    f >> n >> s1;
    for(i = 1; i <= n; i++)
        f >> a[i];
    for(i = 1; i <= n; i++)
        for(j = 1; j <= n; j++)
            for(k = 1; k <= n; k++){
                v[++r].s = a[i] + a[j] + a[k];
                v[r].n1 = a[i];
                v[r].n2 = a[j];
                v[r].n3 = a[k];
                }
    sort(v + 1,v + r + 1,cmp);
    int ok = 0;
    for(i = 1; i <= r; i ++){
        if(caut(v,s1-v[i].s,1,r)!=0){
            g << v[i].n1 <<" ";
            g << v[i].n2 <<" ";
            g << v[i].n3 <<" ";
            g << v[caut(v,s1-v[i].s,1,r)].n1<<" ";
            g << v[caut(v,s1-v[i].s,1,r)].n2<<" ";
            g << v[caut(v,s1-v[i].s,1,r)].n3;
            ok = 1;
            return 0;
        }
    }
    if(ok == 0) g<<-1;
    return 0;
}