Posts 백준 11070 피타고라스 기댓값 c++
Post
Cancel

백준 11070 피타고라스 기댓값 c++

문제

https://www.acmicpc.net/problem/11070

문제해설

2팀이 주어지고 각각 득점한 수가 주어진다.
득점과 실점을 구하여 계산식에 맞게 기댓값을 구한 후
팀 중의 최대와 최소 기댓값을 구하면 된다.

문제풀이

간단해보이는 문제인데 참 많이 틀렸다.
결국 틀린 이유는 마지막 개행문자를 안넣어서 그랬다….
문제를 틀릴만한 이유를 설명해보자면
계산식을 구한 후 1000을 곱한다면 상관없지만
분자에 1000을 곱한 후 분모를 나누려면 long long자료형을 써야한다.
또한 득점과 실점이 모두 0인 경우를 처리해야한다.

전체코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include<iostream>
#include<algorithm>
#include<vector>
#include<limits.h>
using namespace std;
typedef pair<double, double>P;

int main() {
	ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	int t; cin >> t;
	while (t--) {
		int n, m; cin >> n >> m;
		vector<P>arr(n + 1, { 0,0 });
		for (int i = 0; i < m; i++) {
			int a, b, p, q; cin >> a >> b >> p >> q;
			arr[a].first += p;
			arr[a].second += q;
			arr[b].first += q;
			arr[b].second += p;
		}
		int maxx = 0, minn = INT_MAX;
		for (int i = 1; i <= n; i++) {
			double exp;
			if (arr[i].first == 0 && arr[i].second == 0) 
				exp = 0;
			else {
				exp = arr[i].first * arr[i].first / (arr[i].first * arr[i].first + arr[i].second * arr[i].second);
				exp = exp * 1000;
			}
			maxx = max(maxx, (int)exp);
			minn = min(minn, (int)exp);
		}
		cout << maxx << "\n" << minn << "\n";
	}
	return 0;
}

백준 18512 점프 점프 c++

Spring IoC, DI란?

Comments powered by Disqus.