Cod sursa(job #2557432)

Utilizator RazvanucuPopan Razvan Calin Razvanucu Data 25 februarie 2020 19:49:32
Problema Loto Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("loto.in");
ofstream g("loto.out");
struct loto
{
    int i1,i2,i3,sum;
} A[1000005];

int v[105],N,S,Nr,iS,Sol[6];
bool comp(loto x,loto y)
{
    return(x.sum<y.sum);
}
int BinSearch(int low,int x,int high)
{
    while(low<=high)
    {
        int mid=low+(high-low)/2;
        if(A[mid].sum==x)
            return mid;
        if(A[mid].sum>x)
            high=mid-1;
        if(A[mid].sum<x)
                low=mid+1;
    }
    return low;
}
int main()
{
    f>>N>>S;
    for(int i=1; i<=N; i++)
        f>>v[i];

    for(int i1=1; i1<=N; i1++)
        for(int i2=i1; i2<=N; i2++)
            for(int i3=i2; i3<=N; i3++)
            {
              int s=v[i1]+v[i2]+v[i3];
              if(s<=S)
              {   Nr++;
                  A[Nr].sum=s;
                  A[Nr].i1=i1;
                  A[Nr].i2=i2;
                  A[Nr].i3=i3;
              }
            }
    sort(A+1,A+Nr+1,comp);
    int i=1;
    bool ok=0;
    while(i<=Nr && !ok)
    {
       iS=BinSearch(i,S-A[i].sum,Nr);
       if(A[iS].sum+A[i].sum==S) ok=1;
       else i++;

    }
    if(!ok)
        g<<-1;
    else{
        Sol[1]=A[i].i1;
        Sol[2]=A[i].i2;
        Sol[3]=A[i].i3;
        Sol[4]=A[iS].i1;
        Sol[5]=A[iS].i2;
        Sol[6]=A[iS].i3;
        sort(Sol+1,Sol+7);
        for(int i=1;i<=6;i++)
            g<<Sol[i]<<" ";
    }

    return 0;
}