Бинарный поиск константы k. Помогите переделать код под бинарный поиск

У меня есть реализация даного задания https://kurzy.kpi.fei.tuke.sk/pvjc/2022/problemset.racer.html не бинарным поиском, из-за чего система очень долго ищет константу k Мне нужна реализация поиска данной константы (k) бинарным путем. Например такой ввод:
3 5
4 -1
4 0
10 3
результат будет 3.000000
Но вот если ввод такой:
1 500
123 456
То система уже не может определить константу k или просто слишком долго
Вот мой код. Прошу помочь мне его переделать под бинарный поиск

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>

double count(int masiv[][2]);

int main() {
int number1;
int number2;
scanf("%d %d", &number1, &number2);
int speedlong[number1][2];

for(int i = 1; i <= number1; i++) {
    scanf("%d %d", &speedlong[i][0], &speedlong[i][1]);
}
speedlong[0][1]=number2;
speedlong[0][0]=number1;
printf("%.6f\n", count(speedlong));
}

double count(int masiv[][2]) {
double time = masiv[0][1];
int stolbs = masiv[0][0];
int min = masiv[1][1];
int variant = 0;
double koeficient = 0;
double koef2 = 0;
double actions = 10;
double snap = 0.0000001;
double equal = 0;
int temp = 0;
for (int i = 1; i < stolbs + 1; i++) {
    if (min > masiv[i][1]) min = masiv[i][1];
}
if(min <= 0){
    koeficient = (long double) fabs(min);
    variant = 1;
}else if(min > 0){
    for(int i = 1; i < stolbs + 1; i++){
        koef2 = koef2 + masiv[i][0] / masiv[i][1];
    }
    if(koef2 < time){
        variant = 0;
    }else if(koef2 > time){
        variant = 1;
    }
}
while(actions > 0.0000001){
    koef2 = 0;
    for(int i = 1; i < stolbs + 1; i++){
        koef2 = koef2 + masiv[i][0] / (masiv[i][1] + koeficient);
    }
    double difference = koef2 - time;
    actions = fabs(difference);
    
    if(temp == 0) {
        equal = actions;
        temp = 1;
    }else if(temp != 0){
        if(equal < actions){
            if(variant == 1){
                koeficient = koeficient - 2 * snap;
                snap = snap / 10;
                temp = 0;
            }else if (variant !=1){
                koeficient = koeficient + 2 * snap;
                snap = snap / 10;
                temp = 0;
            }
        }else{
            if(variant == 1){
                koeficient = koeficient + snap;
            }else if(variant != 1){
                koeficient = koeficient - snap;
            }
            equal = actions;
        }
    }
}
double k = (double) koeficient;
return k;
}

Ответы (0 шт):