Cod sursa(job #1553853)

Utilizator iuliaotilia26Mustea Iulia-Otilia iuliaotilia26 Data 20 decembrie 2015 17:02:03
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 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 cautbin()
{
    int i,j,mij,s1=0,s2=0,ok=0;
    i=1;j=nr;
    while(i<=j&&ok==0)
    {
       mij=(i+j)/2;
       if(sum[mij].s==S)
       {
           ok=1;
           g<<sum[i].a<<" "<<sum[i].b<<" "<<sum[i].c<<" "<<sum[mij].a<<" "<<sum[mij].b<<" "<<sum[mij].c;
       }
       else if(sum[mij].s>S) j=mij-1;
            else if(sum[mij].s<S) i=mij+1;

    }
    if(ok==0)g<<"-1";
}
int main()
{

    citire();
    calc();
    sort(sum+1,sum+nr+1,comp);
    cautbin();
    f.close();
    g.close();
    return 0;
}