Cod sursa(job #1121785)

Utilizator usermeBogdan Cretu userme Data 25 februarie 2014 14:03:10
Problema Loto Scor 85
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <cstdio>
#include <algorithm>

using namespace std;

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

int n,s,v[101],k;

struct val2{
    int a,b,c;
};

int c[1000001];

val2 c1[1000001];

int main()
{
    n=4;
    s=14;
    fscanf(f,"%d%d",&n,&s);
    v[1]=2;
    v[2]=7;
    v[3]=4;
    v[4]=1;
    for ( int i=1;i<=n;++i )
        fscanf(f,"%d",&v[i]);
    for ( int i=1;i<=n;++i )
        for ( int j=1;j<=n;++j )
            for ( int r=1;r<=n;++r ){
                c[++k]=v[i]+v[j]+v[r];
                c1[k].a=v[i];
                c1[k].b=v[j];
                c1[k].c=v[r];
            }
    sort(c+1,c+k+1);
    int p,pas,sn=s/2;
    for ( int i=1;c[i]<=sn;++i ){
        p=0;
        for ( pas=1<<19;pas;pas/=2 )
            if ( p+pas<=k&&c[i]+c[p+pas]<=s )p+=pas;
        if ( c[i]+c[p]==s ){
            int s1=0,s2=0;
            for ( int j=1;s1==0||s2==0;++j ){
                if ( c1[j].a+c1[j].b+c1[j].c==c[i] )s1=j;
                if ( c1[j].a+c1[j].b+c1[j].c==c[p] )s2=j;
            }
            fprintf(h,"%d %d %d %d %d %d",c1[s1].a,c1[s1].b,c1[s1].c,c1[s2].a,c1[s2].b,c1[s2].c);
            return 0;
        }
    }
    fprintf(h,"-1");
    return 0;
}