Cod sursa(job #1983132)

Utilizator victoreVictor Popa victore Data 21 mai 2017 12:50:03
Problema Loto Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.57 kb
#include<cstdio>
#include<vector>
#include<algorithm>

using namespace std;

const int mod=592993;
vector<int>g[mod+5];
int n,s,v[105];

inline void add_num(int nr)
{
    g[nr%mod].push_back(nr);
    return;
}

inline bool exist_num(int nr)
{
    int x=nr%mod;
    vector<int>::iterator it;
    for(it=g[x].begin();it!=g[x].end();++it)
        if(*it==nr)
            return 1;
    return 0;
}

int main()
{
    freopen("loto.in","r",stdin);
    freopen("loto.out","w",stdout);
    int i,j,k,left,sum=-1;
    scanf("%d%d",&n,&s);
    for(i=1;i<=n;i++)
        scanf("%d",&v[i]);
    sort(v+1,v+n+1);
    for(i=1;i<=n;i++)
        for(j=1;j<=n&&v[i]+v[j]<=s;j++)
            for(k=1;k<=n&&v[i]+v[j]+v[k]<=s;k++)
                add_num(v[i]+v[j]+v[k]);
    for(i=1;i<=n&&sum==-1;i++)
        for(j=1;j<=n&&v[i]+v[j]<=s&&sum==-1;j++)
            for(k=1;k<=n&&v[i]+v[j]+v[k]<=s&&sum==-1;k++)
            {
                left=s-v[i]-v[j]-v[k];
                if(exist_num(left))
                {
                        sum=left;
                        printf("%d %d %d ",v[i],v[j],v[k]);
                }
            }
    if(sum==-1)
        printf("-1");
    else
    {
        for(i=1;i<=n;i++)
            for(j=1;j<=n&&v[i]+v[j]<=s;j++)
                for(k=1;k<=n&&v[i]+v[j]+v[k]<=s;k++)
                {
                    if(v[i]+v[j]+v[k]==sum)
                    {
                        printf("%d %d %d",v[i],v[j],v[k]);
                        return 0;
                    }
                }
    }
    return 0;
}