Cod sursa(job #1974210)

Utilizator Andrei2000Andrei Mihailescu Andrei2000 Data 27 aprilie 2017 01:32:14
Problema Loto Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <bits/stdc++.h>
#define prime_n 1003
#define Nmax 102
using namespace std;
ifstream fin ("loto.in");
ofstream fout ("loto.out");
int n,S,v[Nmax];
vector <vector<int>> vo(prime_n);

void inserth(int q){
    vo[q%prime_n>=0?q%prime_n>=0:q%prime_n+prime_n].push_back(q);
}

int nr(int q){
    int sum=0;
    for (vector<int> :: iterator it = vo[q%prime_n>=0?q%prime_n>=0:q%prime_n+prime_n].begin(); it != vo[q%prime_n>=0?q%prime_n>=0:q%prime_n+prime_n].end(); ++it)
        if(*it==q)sum++;
    return sum;
}

int main()
{

    int w,sum=-1;
    fin>>n>>S;
    for(int i=1;i<=n;++i)
        fin>>v[i];
    for(int i=1;i<=n;++i)
        for(int j=1;j<=n;++j)
            for(int k=1;k<=n;++k)
                inserth(v[i]+v[j]+v[k]);
    for(int i=1;i<=n;++i)
        for(int j=1;j<=n;++j)
            for(int k=1;k<=n;++k){
                int w=S-v[i]-v[j]-v[k];
                if(nr(w)){
                    sum=w;
                    fout<<v[i]<<' '<<v[j]<<' '<<v[k]<<' ';
                    i=j=k=1000;
                }
            }
    if(sum==-1)fout<<-1<<endl;
    else{
        for(int i=1;i<=n;++i)
            for(int j=1;j<=n;++j)
                for(int k=1;k<=n;++k)
                    if(v[i]+v[j]+v[k]==sum){fout<<v[i]<<' '<<v[j]<<' '<<v[k]<<'\n';return 0;}
    }
    return 0;
}