Cod sursa(job #1368832)

Utilizator andreeadeacAndreea Ioana Deac andreeadeac Data 2 martie 2015 20:15:05
Problema Loto Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.55 kb
#include <fstream>
#include<iostream>
using namespace std;

ifstream in("loto.in");
ofstream out("loto.out");
const int MOD=666013;
const int N=1100001;
int n,S,v[101],lst[MOD],val[N],urm[N],m;

void adauga(int x, int rest){
    n++;
    val[n] = x;
    urm[n] = lst[rest];
    lst[rest] = n;
}
bool verifica(int x,int rest){
    int p=lst[rest];
    while(p!=0){
        if(val[p]==x)
            return true;
        p=urm[p];
    }
    return false;
}

void scrie(int su){
    int i,j,k;
    for(i=1;i<=m;i++)
        for(j=1;j<=m;j++)
            for(k=1;k<=m;k++)
                if(v[i]+v[j]+v[k]==su){
                    out<<v[i]<<" "<<v[j]<<" "<<v[k];
                    return;
                }

}

int main()
{
    in>>m>>S;
    int i,j,k,su,rest;
    for(i=1;i<=m;i++)
        in>>v[i];
    for(i=1;i<=m;i++)
        for(j=1;j<=m;j++)
            for(k=1;k<=m;k++){
                su=v[i]+v[j]+v[k];
                rest=su%MOD;
                adauga(su,rest);
            }
    bool cod=false;
    for(i=1;i<=m&& cod==false;i++)
        for(j=1;j<=m && cod==false;j++)
            for(k=1;k<=m && cod==false;k++){
                su=v[i]+v[j]+v[k];
                //out<<su<<"\n";
                rest=(S - su)%MOD;
                cod=verifica(S-su,rest);
                if(cod==true){
                    out<<v[i]<<" "<<v[j]<<" "<<v[k]<<" ";
                    scrie(S-su);
                }
            }
    if(cod==false)
        out<<"-1";
    in.close();
    out.close();
    return 0;
}