Cod sursa(job #1702466)

Utilizator oldatlantianSerban Cercelescu oldatlantian Data 15 mai 2016 11:40:22
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.68 kb
//#define TGEN
#include <bits/stdc++.h>
using namespace std;

#ifndef TGEN

const int MOD = 9997;

struct I3 {
    int a, b, c;

    I3(int _a, int _b, int _c) {
        a = _a;
        b = _b;
        c = _c;
    }

    inline int sum(void) {
        return a+b+c;
    }
};

FILE *fi = fopen("loto.in", "r");
FILE *fo = fopen("loto.out", "w");

int n, s, v[105];
vector<I3> h[MOD];


inline void search(I3 val) {
    if(s-val.sum()<0)
        return;
    int p = (s-val.sum()) % MOD;
    for(int i=0; i<h[p].size(); ++i) {
        if(h[p][i].sum()==s-val.sum()) {
            fprintf(fo,"%d %d %d %d %d %d\n",h[p][i].a,h[p][i].b,h[p][i].c , val.a,val.b,val.c);
            exit(0);
        }
    }
}

inline void insert(I3 val) {
    int p = val.sum() % MOD;
    for(int i=0; i<h[p].size(); ++i)
        if(h[p][i].sum()==val.sum())
            return;
    h[p].push_back(val);
}

int main(void) {
    fscanf(fi,"%d%d",&n,&s);
    for(int i=1; i<=n; ++i)
        fscanf(fi,"%d",&v[i]);

    for(int i=1; i<=n; ++i) {
        for(int j=i; j<=n; ++j) {
            for(int k=j; k<=n; ++k) {
                insert(I3(v[i],v[j],v[k]));
                search(I3(v[i],v[j],v[k]));
            }
        }
    }

    fprintf(fo,"-1\n");

    fclose(fi);
    fclose(fo);
    return 0;
}

#else

bool f[6000005];

int main(void) {
    FILE *fo = fopen("loto.in","w");
    int n, k, t;

    n = rand()%100+1;
    k = rand()%600000+1;
    fprintf(fo,"%d %d\n",n,k);
    for(int i=0; i<n; ++i) {
        t = rand()%100000+1;
        if(!f[t])
            fprintf(fo,"%d ",t);
        f[t]=true;
    }
    fclose(fo);
    return 0;
}
#endif