※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 24933번 문제인 Quadratic Dissonance이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/24933
24933번: Quadratic Dissonance
Input consists of a single line containing four integers $A,B,C,D$, each lying in the range $[-1000,1000]$.
www.acmicpc.net
문제에서 주어지는 함수의 최솟값을 가질 수 있는 후보 x좌표는 각 이차함수가 최솟값을 갖는 x좌표 x1과 x2, 그리고 (존재한다면) 두 그래프의 교점 x3이다.
두 그래프의 교점은 A와 C가 서로 다르다면 존재하고, 간단한 일차방정식을 풀어 계산해낼 수 있다.
각 점에서의 함숫값을 계산해, 가장 작은 함숫값을 가진 좌표를 출력해주자.
아래는 제출한 소스코드이다.
#include <iostream>
#include <string>
using namespace std;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout << fixed;
cout.precision(10);
int A, B, C, D; cin >> A >> B >> C >> D;
double x1 = -0.5 * A, x2 = -0.5 * C, x3;
if (A == C) x3 = -0.5 * A;
else x3 = (double)(D - B) / (double)(A - C);
double val1 = max(x1 * x1 + A * x1 + B, x1 * x1 + C * x1 + D);
double val2 = max(x2 * x2 + A * x2 + B, x2 * x2 + C * x2 + D);
double val3 = max(x3 * x3 + A * x3 + B, x3 * x3 + C * x3 + D);
if (val1 < val2 && val1 < val3) cout << x1 << ' ' << val1;
else if (val2 < val1 && val2 < val3) cout << x2 << ' ' << val2;
else cout << x3 << ' ' << val3;
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 21213 // C++] Mentors (0) | 2022.05.04 |
---|---|
[BOJ 18405 // C++] 경쟁적 전염 (0) | 2022.05.03 |
[BOJ 25001 // C++] Pen (0) | 2022.05.01 |
[BOJ 24999 // C++] Prom (0) | 2022.05.01 |
[BOJ 24867 // C++] Два станка (0) | 2022.05.01 |