Cod sursa(job #1291800)

Utilizator costyv87Vlad Costin costyv87 Data 13 decembrie 2014 11:53:30
Problema Loto Scor 100
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2014, Anul I Marime 1.46 kb
#include <cstdio>
#include <algorithm>
using namespace std;
FILE *f,*g;
int v[110],v2[330];
int i,j,q,nn,n,s,ss,n2;
struct cp{int x,y,z,nr;} mx,a[1000100];
 
void caut(int i, int j ,int x) {
int m;
 
if (i<=j) {
    m=(i+j)/2;
    if (a[m].nr==x) {
        mx=a[m];
        return ;
        }
    if (a[m].nr>x) 
        caut (i,m-1,x);
    else
        caut (m+1,j,x);
    }
 
}
 
bool cmp(cp i,cp j) {
return (i.nr>j.nr);
}
 
int main() {
f=fopen("loto.in","r");
g=fopen("loto.out","w");
 
fscanf(f,"%d%d",&n,&s);
 
for (i=1;i<=n;i++) {
    fscanf(f,"%d",&v[i]);
    }
 
nn=0;
 
for (i=1;i<=n;i++)
    for (j=i;j<=n;j++)
        for (q=j;q<=n;q++) {
            a[++nn].nr=v[i]+v[j]+v[q];
            a[nn].x=v[i];
            a[nn].y=v[j];
            a[nn].z=v[q];
            }
 
bool ok=false;
/*for (i=1;i<=nn;i++)
    fprintf(g,"%d\n",a[i].nr);*/
sort(a+1,a+nn+1,cmp);
 
/*
for (i=1;i<=nn && a[i].nr<s;i++) {
    ss=s-a[i].nr;
    mx.nr=-1;
    caut(1,nn,ss);
    if (mx.nr!=-1) {
        fprintf(g,"%d %d %d %d %d %d",a[i].x,a[i].y,a[i].z,mx.x,mx.y,mx.z); 
          ok=true;
        break;
        }
     
    }
*/
i=1; j=nn;
 
while (a[i].nr+a[j].nr!=s && i<=j) {
    if (a[i].nr+a[j].nr<s) 
        --j;
        else
            i++;
    }
 
 
if (i<=j)
    {
        fprintf(g,"%d %d %d %d %d %d",a[i].x,a[i].y,a[i].z,a[j].x,a[j].y,a[j].z); 
    }
else
    fprintf(g,"-1");
 
fclose(g);
return 0;
}