Cod sursa(job #2693193)

Utilizator rimihaiMihai Radu-Ioan rimihai Data 5 ianuarie 2021 09:29:31
Problema Loto Scor 55
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("loto.in");
ofstream fout("loto.out");
int v[105];
int poz,start;
struct puncte
{
    int a,b,c,s;
} pct[200000];

int cautarebin(int val)
{
    int mid,st,dr;
    st=start;dr=poz;
    while(st<=dr)
    {
        mid=(st+dr)/2;
        if(pct[mid].s==val)return mid;
            else if(pct[mid].s<val)st=mid+1;
            else dr=mid-1;
    }
    return -1;
}
bool sortare(puncte A, puncte B)
{
    return A.s<=B.s;
}
int main()
{
    int n,suma,ok=0;
    poz=0;
    fin>>n>>suma;
    for(int i=1; i<=n; i++)
        fin>>v[i];
    for(int i=1; i<=n; i++)
        for(int j=i; j<=n; j++)
            for(int k=j; k<=n; k++)
            {
                poz++;
                pct[poz].a=v[i];
                pct[poz].b=v[j];
                pct[poz].c=v[k];
                pct[poz].s=v[i]+v[j]+v[k];
            }
    sort(pct+1,pct+poz+1,sortare);
    for(int i=1; i<=poz and ok==0; i++)
    {
        int cautat=suma-pct[i].s;
        start=i;
        int j=cautarebin(cautat);
        if(j!=-1)
        {
            fout<<pct[i].a<<" "<<pct[i].b<<" "<<pct[i].c<<" "<<pct[j].a<<" "<<pct[j].b<<" "<<pct[j].c;
            ok=1;
        }
    }
    if(ok==0) fout<<-1;
    return 0;
}