Cod sursa(job #2138784)

Utilizator ovidius11Stiriu Ovidius ovidius11 Data 21 februarie 2018 21:13:56
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include<cstdio>
#include<cstdlib>
#include<algorithm>
using namespace std;
int v[105];
struct nr{
int i,j,k,sum;
}num[1000005];
int u;
int cmp(nr a,nr b){
return a.sum<b.sum;}
int exist(int sum){
int st=1,dr=u,mij;
while(st<=dr){
mij=(st+dr)/2;
if (num[mij].sum==sum)
return mij;
if (num[mij].sum<sum)
st=mij+1;
else
dr=mij-1;}
return -1;}
int main(){
freopen("loto.in","r",stdin);
freopen("loto.out","w",stdout);
int n,i,j,k,s,nu;
scanf("%d%d",&n,&s);
for(i=1;i<=n;i++)
scanf("%d",&v[i]);
for(i=1;i<=n;i++)
for(j=i;j<=n;j++)
for(k=j;k<=n;k++)
num[++u].i=i,num[u].j=j,num[u].k=k,num[u].sum=v[i]+v[j]+v[k];
sort(num+1,num+u+1,cmp);
for(i=1;i<=n;i++)
for(j=i;j<=n;j++)
for(k=j;k<=n;k++){
nu=exist(s-v[i]-v[j]-v[k]);
if (nu!=-1){
//printf("%d %d %d %d %d %d\n",v[i],v[j],v[k],num[nu].i,num[nu].j,num[nu].k);
//exit(0);
}}
printf("-1\n");
return 0;}