Cod sursa(job #2381436)

Utilizator butnaru_vlad2003Butnaru Vlad butnaru_vlad2003 Data 16 martie 2019 19:26:50
Problema Loto Scor 0
Compilator cpp-64 Status done
Runda cautare-binara Marime 1.83 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in ("loto.in");
ofstream out ("loto.out");
int main()
{
    int n,s,v[100001],sume[100001],cnt=1;
    int v1[100001],v2[100001],v3[100001];
    in>>n>>s;
    for (int i=1;i<=n;++i)
        in>>v[i];
    sort (v+1,v+n+1);
    for (int i=1;i<=n;++i)
        for (int k=i;k<=n;++k)
            for (int j=k;j<=n;++j)
                {
                    sume[cnt]=v[i]+v[j]+v[k];
                    v1[cnt]=v[i];
                    v2[cnt]=v[j];
                    v3[cnt++]=v[k];
                }
    for (int i=1;i<=n;++i)
        for (int k=i;k<=n;++k)
            for (int j=k;j<=n;++j)
            {
                int s1=s-(v[i]+v[j]+v[k]);
                int l=1,r=(n+1)*(n+2)/2,ok=0,x,ok1=0;
                while (l<=r)
                {
                    int mid=(l+r)/2;
                    if (sume[mid]==s1)
                    {
                        x=sume[mid];
                        ok=mid;//loc unde am gasit suma
                        ok1=1;
                    }
                    if (v[mid]<s1)
                        l=mid+1;
                    else
                        r=mid-1;
                }
                if (ok1==1 || j==n)
                {
                    int x1,x2,x3;
                    x1=v1[ok];
                    x2=v2[ok];
                    x3=v3[ok];
                    int ver=v[x1]+v[x2]+v[x3]+v[i]+v[j]+v[k];
                    if (ver==s)
                    {
                        out<<v[i]<<' '<<v[j]<<' '<<v[k]<<' '<<v[x1]<<' '<<v[x2]<<' '<<v[x3];
                        return 0;
                    }
                    else
                    {
                        out<<-1;
                        return 0;
                    }
                }
            }
}