Cod sursa(job #2658599)

Utilizator Fantastic_Mantudor voicu Fantastic_Man Data 14 octombrie 2020 15:16:53
Problema Loto Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <stdio.h>
#include <vector>
using namespace std;
// 1017932
const int NMAX = 100;
const int MOD = 666013;
struct ura {
    int a,b,c;
    int s;
};
vector <ura> h[MOD];
int find_hash(int suma) {
    int cod=suma%MOD;
    unsigned int i=0;
    while(i<h[cod].size() && h[cod][i].s!=suma)
        i++;
    return i<h[cod].size()?i:-1;
}
void add_hash(ura x) {
    int cod=x.s%MOD;
    unsigned int i=0;
    while(i<h[cod].size() && h[cod][i].s!=x.s)
        i++;
    if(i==h[cod].size())
        h[cod].push_back(x);
}
int v[NMAX];
int main() {
    FILE *fin,*fout;
    int n,s,ok,i,j,k,suma;
    fin=fopen("loto.in","r");
    fscanf(fin,"%d%d",&n,&suma);
    for(i=0;i<n;i++)
        fscanf(fin,"%d",&v[i]);
    fclose(fin);
    ok=-1;
    fout=fopen("loto.out","w");
    for(i=0;i<n && ok<0;i++)
        for(j=0;j<n && ok<0;j++)
            for(k=0;k<n && ok<0;k++) {
                s=v[i]+v[j]+v[k];
                add_hash({v[i],v[j],v[k],s});
                if(s<=suma) {
                    ok=find_hash(suma-s);
                    if(ok>=0) {
                        int cod=(suma-s)%MOD;
                        fprintf(fout,"%d %d %d %d %d %d\n",v[i],v[j],v[k],h[cod][ok].a,h[cod][ok].b,h[cod][ok].c);
                    }
                }
            }
    if(ok<0)
        fprintf(fout,"-1");
    fclose(fout);
    return 0;
}