[백준(BOJ)] 피타고라스 기댓값(11070번)_C++
2023. 9. 13. 15:24ㆍProblem Solving/Math
728x90
반응형
SMALL
문제에 주어진 대로 계산하면 되는 쉬운 문제다.
팀별 경기 수와 득점 수, 실점 수를 나타내는 구조체를 정의하고,
이에 대한 배열을 선언하여 데이터를 관리했다.
(지금 생각하니 경기 수는 저장하지 않아도 됐다)
입력을 한 줄 씩 받으면서 a팀과 b팀의 경기 수, 득점 수, 실점 수를 증가시키고,
입력이 끝나고 나면 그냥 전체 팀을 탐색하면서 피타고라스 기댓값의 최댓값, 최솟값을 갱신시키면 된다.
DivisionByZero 에러가 발생할 수 있으므로 이에 대한 예외처리만 하면
딱히 신경쓸 것이 없는 문제다.
정답 코드
#include <iostream>
#include <algorithm>
using namespace std;
struct team{
int match = 0;
int S = 0;
int A = 0;
};
int T, n, m;
int main(){
cin.tie(NULL);
cout.tie(NULL);
ios_base::sync_with_stdio(false);
//input
cin >> T;
while (T--){
cin >> n >> m;
team t[1001];
for (int i = 0; i < m; i++){
int a, b, p, q;
cin >> a >> b >> p >> q;
t[a].match++;
t[a].S += p;
t[a].A += q;
t[b].match++;
t[b].S += q;
t[b].A += p;
}
float MAX, MIN;
if (t[1].S * t[1].S + t[1].A * t[1].A == 0){
MAX = 0;
MIN = 0;
}
else{
MAX = ((float)t[1].S * t[1].S) / ((float)t[1].S * t[1].S + t[1].A * t[1].A);
MIN = ((float)t[1].S * t[1].S) / ((float)t[1].S * t[1].S + t[1].A * t[1].A);
}
for (int i = 2; i <= n; i++){
if (t[i].S * t[i].S + t[i].A * t[i].A == 0){
MAX = max(MAX, (float)0);
MIN = min(MIN, (float)0);
}
else{
MAX = max(MAX, ((float)t[i].S * t[i].S) / ((float)t[i].S * t[i].S + t[i].A * t[i].A));
MIN = min(MIN, ((float)t[i].S * t[i].S) / ((float)t[i].S * t[i].S + t[i].A * t[i].A));
}
}
//output
cout << (int)(MAX * 1000) << "\n";
cout << (int)(MIN * 1000) << "\n";
}
}728x90
반응형
LIST
'Problem Solving > Math' 카테고리의 다른 글
| [백준(BOJ)] Balanced String(17520번)_C++ (0) | 2023.09.25 |
|---|---|
| [백준(BOJ)] Farm(16283번)_C++ (0) | 2023.09.15 |
| [백준(BOJ)] 회문인 수(11068번)_C++ (0) | 2023.09.12 |
| [백준(BOJ)] 헨리(10253번)_C++ (0) | 2023.09.05 |
| [백준(BOJ)] ACM 호텔(10250번)_C++ (0) | 2023.09.04 |