Cod sursa(job #855205)

Utilizator RamaStanciu Mara Rama Data 14 ianuarie 2013 19:27:00
Problema Loto Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.52 kb
#include <fstream>
#include<stdio.h>
#include <vector>
#define rest 666013
FILE*g;
using namespace std;

vector <long> hash[rest+3];
long maxim, A[101],n;


void insert (long long x)
{
    long i,k;
    k=x%rest;
    if (k>maxim) maxim=k;
    for(i=0;i<hash[k].size();i++)
       {
           if (hash[k][i]==x) return;
       }
    hash[k].push_back(x);
}
int verif(long x)
{
    long i,k;
    k=x%rest;
    for(i=0;i<hash[k].size();i++)
       {
           if (hash[k][i]==x) return 1;
       }
    return 0;
}

int dif(long s)
{
    long  x,k,i,j;
    k=s%rest;
    for(i=0;i<=maxim;i++)
       {
          for(j=0;j<hash[i].size();j++)
            {
                x=s-hash[i][j];
                if(verif(x)) return hash[i][j];
            }
       }
    return -1;
}
void numere(long x)
{
    long i,j,k;
    int ok=0;
    for(i=1;i<=n && ok==0;i++)
        for(j=1;j<=n && ok==0;j++)
            for(k=1;k<=n && ok==0;k++)
                if ((A[i]+A[j]+A[k])==x) {fprintf(g,"%ld %ld %ld ",A[i],A[j],A[k]); ok=1;}

}
int main()

{
    FILE*f;
    f=fopen("loto.in","r");
    g=fopen("loto.out","w");


    long i,j,k,s,suma;
    fscanf(f,"%ld",&n);
    fscanf(f,"%ld",&s);
    for(i=1;i<=n;i++)
        fscanf(f,"%ld",&A[i]);
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            for(k=1;k<=n;k++)
                insert (A[i]+A[j]+A[k]);
    suma=dif(s);
    if (suma==-1) printf("-1");
        else {numere(suma);
    numere(s-suma);}


        return 0;
}