Cod sursa(job #1258596)

Utilizator ovidiuz98Zamfir Ovidiu ovidiuz98 Data 9 noiembrie 2014 01:00:57
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <fstream>
#include <algorithm>
using namespace std;

ifstream fin("loto.in");
ofstream fout("loto.out");
struct comb{
    int x,y,z;
    int sum;
}a[100*100*100+1];
long long n,v[102],i,j,s,d,k,x,st,dr,m,b[7],y;
int cmp( const comb a, const comb b){
    if(a.sum < b.sum)
        return 1;
return 0;
}
int caut(int x){
    int st=1;int dr=k;int m;
    while(st<=dr){
        m=(dr+st)>>1;
        if(a[m].sum==x) return m;
        if(a[m].sum<x) st=m+1;
        else dr=m-1;
    }
    return st;
}
int main(){

    fin>>n>>s;
    for(i=1;i<=n;i++)
        fin>>v[i];
    sort(v+1,v+n+1);
    for(i=1;i<=n;i++){
        for(j=1;j<=n;j++){
            for(d=1;d<=n;d++)
            {
                a[++k].x=i;
                a[k].y=j;
                a[k].z=d;
                a[k].sum=v[i]+v[j]+v[d];
            }
        }
    }
    sort(a+1,a+k+1,cmp);
    for(i=1;i<=k;i++){
        if(a[i].sum<s){
            y=caut(s-a[i].sum);
            if(a[y].sum+a[i].sum==s){
                fout<<a[i].x<<" ";
                fout<<a[i].y<<" ";
                fout<<a[i].z<<" ";
                fout<<a[y].x<<" ";
                fout<<a[y].y<<" ";
                fout<<a[y].z<<" ";
                return 0;
            }
        }
    }
    fout<<-1;
    fin.close();fout.close();
    return 0;
}