Cod sursa(job #1647420)

Utilizator Daria09Florea Daria Daria09 Data 10 martie 2016 20:30:26
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <iostream>
#include <fstream>
#include <math.h>
#include <algorithm>
using namespace std;
ifstream f("loto.in");
ofstream g("loto.out");
int v[101],n,s;
struct loto
{
    long long suma;
    int x,y,z;
};
loto sum[10001];
void citire()
{
    f>>n>>s; int i;
    for(i=1;i<=n;i++)
        f>>v[i];
    f.close();
}
inline bool cmp(loto a,loto b)
{
    return a.suma<b.suma;
}
void afisare(int a,int b,int c,int d,int e,int f)
{
    v[1]=a; v[2]=b; v[3]=c; v[4]=d; v[5]=e; v[6]=f;
    sort(v+1,v+7);
    int j;
    for(j=1;j<=6;j++)
        g<<v[j]<<" ";
}
int rez()
{
    int i1,i2,i3,i=0;
    for(i1=1;i1<=n;i1++)
    for(i2=i1;i2<=n;i2++)
    for(i3=i2;i3<=n;i3++)
    {
        sum[++i].suma=v[i1]+v[i2]+v[i3];
        sum[i].x=i1;
        sum[i].y=i2;
        sum[i].z=i3;
    }
    sort(sum+1,sum+1+i,cmp);
    int a,b,numar,mij;
    for(i1=1;i1<=i;i1++)
    {
        a=1;
        b=i;
        numar=s-sum[i1].suma;
        while(a<b)
        {
            mij=(a+b)/2;
            if(sum[mij].suma==numar)
            {afisare(sum[i1].x,sum[i1].y,sum[i1].z,sum[mij].x,sum[mij].y,sum[mij].z); return 0;}
            if(sum[mij].suma<numar) a=mij+1;
            if(sum[mij].suma>numar) b=mij-1;
        }
    }
    g<<-1;
}
int main()
{
    citire();rez();
    return 0;
}