Cod sursa(job #1009188)

Utilizator dan.ghitaDan Ghita dan.ghita Data 12 octombrie 2013 16:43:24
Problema Loto Scor 15
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 kb
#include<iostream>
#include<fstream>
#include<map>
#include<algorithm>
#include<vector>
using namespace std;
vector<int> sum;
vector<int> v;
vector<int>::iterator it, jt, kt;
ifstream f("loto.in");
ofstream g("loto.out");
int r, n, S, a, fol[1000000][3], nr;
struct suma{
int a, b, c, si;
} sm[1000000];

bool comp(suma a, suma b){
if(a.si>b.si) return 0;
return 1;
}
int cautare(int a, int b, int val){
    int m=(a+b)/2;
    if(sm[m].si==val) return m;
    else{
    if(a==b) return 0;
    else{
        if(sm[m].si>val) cautare(a, m, val);
        else cautare(m+1,b,val);}
    }
}
void afisare(int i, int j){
g<<sm[i].a<<' '<<sm[i].b<<' '<<sm[i].c<<' '<<sm[j].a<<' '<<sm[j].b<<' '<<sm[j].c<<'\n';
}
int main()
{
    f>>n>>S;
    for(int i=0; i<n; ++i){f>>a; v.push_back(a);}


    for(it=v.begin(); it!=v.end(); ++it)
    for(jt=v.begin(); jt!=v.end(); ++jt)
    for(kt=v.begin(); kt!=v.end(); ++kt){
    //sum.push_back(*it+*jt+*kt);    fol[nr][0]=*it; fol[nr][1]=*jt; fol[nr][2]=*kt;    ++nr;
    sm[nr].si=*it+*jt+*kt;// cout<<sm[i].si;
    sm[nr].a=*it;
    sm[nr].b=*jt;
    sm[nr].c=*kt;
    ++nr;
    }
    sort(sm, sm+nr, comp);
    //cout<<cautare(0, nr-1, 10)<<' ';
    for(int i=0; i<nr; ++i){
     a=cautare(0, nr, S-sm[i].si);
     if(a) {afisare(i, a); break;}
     }
    //for(int i=0; i<n*n*n; ++i) cout<<sm[i].si;




    g.close();
    return 0;
}