Pagini recente » Monitorul de evaluare | Atasamentele paginii Profil am_2_puli_mari | Atasamentele paginii Profil marialzr | Cod sursa (job #3364893) | Cod sursa (job #3368968)
#include <stdio.h>
#include <stdbool.h>
int v[100];
#define Max 180000
int sume[Max];
int nr1[Max];
int nr2[Max];
int nr3[Max];
int cnt;
void swap(int *a,int *b){
int r;
r=*a;
*a=*b;
*b=r;
}
void quicksort(int st,int dr){
if(st>=dr){
return;
}
int mij=(dr+st)/2;
int nr=sume[mij];
int i=st;
int j=dr;
while (i <= j) {
while (sume[i] < nr) i++;
while (sume[j] > nr) j--;
if (i <= j) {
swap(&sume[i], &sume[j]);
swap(&nr1[i], &nr1[j]);
swap(&nr2[i], &nr2[j]);
swap(&nr3[i], &nr3[j]);
i++;
j--;
}
}
quicksort(st, j);
quicksort(i, dr);
}
int cautbin(int x){
int st=0,dr=cnt-1,raspuns=-1;
while(st<=dr){
int mij=(st+dr)/2;
if(sume[mij]==x){
raspuns=mij;
dr=mij-1;
}
else if(sume[mij]<x){
st=mij+1;
}
else{
dr=mij-1;
}
}
return raspuns;
}
int main()
{
FILE *fin, *fout;
fin=fopen("loto.in","r");
fout=fopen("loto.out","w");
int n,s;
fscanf(fin, "%d %d", &n,&s);
for(int i=0;i<n;i++){
fscanf(fin, "%d", &v[i]);
}
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
if(v[j]>v[i]){
swap(&v[i],&v[j]);
}
}
}
//fscanf(fin, "%d", &n);
//fprintf(cautbin_out,"%d\n" , cerinta2(nr,n));
for(int i=0;i<n;i++){
for(int j=i;j<n;j++){
for(int k=j;k<n;k++){
sume[cnt]=v[i]+v[j]+v[k];
nr1[cnt]=v[i];
nr2[cnt]=v[j];
nr3[cnt]=v[k];
cnt++;
}
}
}
quicksort(0,cnt-1);
bool gasit=false;
for(int i=0;i<cnt&& gasit==false;i++){
int q=s-sume[i],x=cautbin(q);
if(x!=-1){
fprintf(fout,"%d %d %d %d %d %d",nr1[i],nr2[i],nr3[i],nr1[x],nr2[x],nr3[x]);
gasit=true;
}
}
if(gasit==false){
fprintf(fout,"-1");
}
fclose(fin);
fclose(fout);
return 0;
}