cat <<'X' int M=N-1@ E *A=malloc((long)M*sizeof(E))@ E *B=malloc((long)M*sizeof(E))@ for(m=1@m!=N@++m){ double x=(double)d[m]/((int)nn[m]*(int)nn[m])@ A[m-1].v=x@ A[m-1].id=m@ B[m-1].v=x*x@ B[m-1].id=m@ } qsort(A,M,sizeof(E),cmp)@ qsort(B,M,sizeof(E),cmp)@ double delta=1e-12, best=1e100@ int ba=0, bb=0@ while(best > delta){ int j=0@ int i@ for(i=0@i!=M@++i){ while(j!=M && (A[i].v-delta) > B[j].v) ++j@ int k=j@ while(k!=M && !(B[k].v > A[i].v+delta)){ int ma=A[i].id, mb=B[k].id@ if(ma!=mb && ((ma&mb)==mb)){ double dd=A[i].v-B[k].v@ if(dd > 0) {} else dd=-dd@ if(best > dd){ best=dd@ ba=ma@ bb=mb@ } } ++k@ } } printf("delta %.17g best %.17g b=%d a=%d\n",delta,best,__builtin_popcount(bb),__builtin_popcount(ba))@ if(!(best > delta)) break@ delta=delta*10.0@ } X