Cod sursa(job #398810)

Utilizator mihai995mihai995 mihai995 Data 19 februarie 2010 13:57:49
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <fstream>
using namespace std;
int n,s,v[101],a[10001];
ifstream f("loto.in");
ofstream o("loto.out");
int comp (const void *a,const void *b){return *(int*)a-*(int*)b;}
void exe(int c) 
{
	int i,j,k;
    for (int i=1;i<=n;i++) 
        for (j=1;j<=n;j++) 
            for (k=1;k<=n;k++) 
                if (v[i]+v[j]+v[k]==c) 
				{
                    o<<v[i]<<" "<<v[j]<<" "<<v[k]<<" ";
                    return;
                }
}
int bsrc(int m)
{
    int i,step;
    for (step=1;step<v[0];step<<= 1) {}
    for (i=0;step;step>>=1) 
        if (i+step<=v[0] && a[i+step]<=s-a[m]) i+=step;
    if (a[i]==s-a[m])
	{
        exe(a[i]);
        exe(a[m]);
        return 1;
    }
    return -1;
}
int main () 
{
    int i,j,k,m;
	f>>n>>s;
    for (i=1;i<=n;i++)
        f>>v[i];
    for (i=1;i<=n;i++) 
        for (j=i;j<=n;j++)
            for (k =j;k<=n;k++) 
                a[v[0]++]=v[i]+v[j]+v[k];     
	qsort(a+1,a[0],sizeof(int),comp);
    for (m=1;m<=v[0];m++)
        if (bsrc(m)==1) return 0;
    o<<"-1";     
    return 0;
}