본문 바로가기

백준

2090 조화평균

분수를 계산해야 하는 문제였다. 

분수 문제 풀 일 있으면 갖다쓰자

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <functional>
#include <string>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <cmath>
#include <cstring>
#include <bitset>

#define xx first
#define yy second
#define all(x) (x).begin(), (x).end()

using namespace std;
using i64 = long long int;
using ii = pair<int, int>;
using ii64 = pair<i64, i64>;

i64 gcd(i64 a, i64 b) {
	while(b != 0) {
		i64 r = a % b;
		a = b;
		b = r;
	}
	return a;
}

i64 lcm(i64 a, i64 b) {
    return a * b / gcd(a, b);
}

int     main()
{
    int n;
    scanf("%d", &n);
    
    vector<ii64> v(n);
    for (int i = 0; i < n; i++) {
        scanf("%lld", &v[i].yy);
        v[i].xx = 1;
    }
    
    i64 a = v[0].xx, b = v[0].yy;
    for (int i = 1; i < n; i++) {
        i64 lcmv = lcm(v[i].yy, b);
        v[i].xx = lcmv / v[i].yy * v[i].xx;
        a = lcmv / b * a + v[i].xx;
        b = lcmv;
    }
    
    i64 gcdv = gcd(a, b);
    
    printf("%lld/%lld\n", b/gcdv, a/gcdv);

    return 0;
}

'백준' 카테고리의 다른 글

16923 다음 다양한 단어  (0) 2021.07.18
20149 선분 교차 3  (0) 2021.07.18
12850 본대 산책2  (0) 2021.07.17
16938 캠프 준비  (0) 2021.07.17
12916 K-Path  (0) 2021.07.17