Бинарный поиск константы 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;
}