Cod sursa(job #1846050)

Utilizator MihneaGhiraMihnea MihneaGhira Data 12 ianuarie 2017 07:58:25
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include<fstream>
#include <algorithm>
using namespace std;
ifstream fin("loto.in");
ofstream fout("loto.out");
int n,s,i,i2,i3,u,p,k,mid;
int v[101];
struct lot{
    int a;
    int b;
    int c;
    int S;

};
lot x[1000001];

int cmp(lot a, lot b) {
    return a.S < b.S;
}

int main(){
    fin>>n>>s;
    for(i=1;i<=n;i++)
        fin>>v[i];
    for(i=1;i<=n;i++){
        for(i2=i;i2<=n;i2++){
            for(i3=i2;i3<=n;i3++) {
                x[++k].a=v[i];
                x[k].b=v[i2];
                x[k].c=v[i3];
                x[k].S=v[i]+v[i2]+v[i3];
            }
        }
    }
    sort(x+1,x+k+1,cmp);
    for(i=1;i<=k;i++){
        p=1;
        u=k;
        while(p<=u){
            mid=p+(u-p)/2;
            if (x[mid].S == s-x[i].S)
                break;
            if(s-x[i].S<x[mid].S)
                u=mid-1;
            else
                p=mid+1;
        }
        if(x[i].S+x[p-1].S==s){
            fout<<x[i].a<<" "<<x[i].b<<" "<<x[i].c<<" "<<x[p-1].a<<" "<<x[p-1].b<<" "<<x[p-1].c;
            return 0;
        }
        if(p<=u){
            fout<<x[i].a<<" "<<x[i].b<<" "<<x[i].c<<" "<<x[mid].a<<" "<<x[mid].b<<" "<<x[mid].c;
            return 0;
        }
    }
    fout<<"-1";
    return 0;
}