4개의 정수 a, b, c 및 k가 있다고 가정합니다. 다음 방정식이 −
를 만족하도록 최소 양수 값 x를 찾아야 합니다.𝑎𝑥2+𝑏𝑥+𝑐 ≥𝑘
a =3, b =4, c =5 및 k =6이면 출력은 1
이 됩니다.이를 해결하기 위해 우리는 이분법을 사용할 것입니다. x는 최소 양의 정수여야 하므로 하한은 0입니다.
예시
#include<iostream> using namespace std; int getMinX(int a, int b, int c, int k) { int x = INT8_MAX; if (k <= c) return 0; int right = k - c; int left = 0; while (left <= right) { int mid = (left + right) / 2; int val = (a * mid * mid) + (b * mid); if (val > (k - c)) { x = min(x, mid); right = mid - 1; } else if (val < (k - c)) left = mid + 1; else return mid; } return x; } int main() { int a = 3, b = 2, c = 4, k = 15; cout << "Minimum value of x is: " << getMinX(a, b, c, k); }
출력 -
Minimum value of x is: 2