알고리즘/atcoder90제

앳코더90 - 022 - Cubic Cake(★2)

b1ackhand 2024. 11. 16. 11:19

https://atcoder.jp/contests/typical90/tasks/typical90_v

 

022 - Cubic Cake(★2)

AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.

atcoder.jp

 

A* B* C 크기의 빵이있다. 이를 최소한으로 잘라서 모두 같은 크기로 만들어라. 자른 횟수를 구하라.

많이 볼법한 문제이다. A, B, C의 공통된 크기로 만들려면 gcd를 이용한다. 그리고 나눈횟수를 단순히 세주면 된다.

 

#define _CRT_SECURE_NO_WARNINGS
#include <bits/stdc++.h>
#include <unordered_set>
#include <numeric>
#include <random>
#include <iostream>
#include <unordered_map>
#include <atcoder/all>

#define rep(i, n) for (int i = 0; i < (int)(n); ++i)
#define rep1(i, n) for (int i = 1; i <= (int)(n); ++i)
#define range(x) begin(x), end(x)
#define sz(x) (int)(x).size()
#define pb push_back

using namespace std;
using namespace atcoder;

typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<long long, long long> pll;
typedef vector<int> vi;
typedef vector<long long> vll;

const int INF = 2000000000;
const double pi = 3.14159265358979;
const int MOD = 100000;

void yesno(bool a)
{
	if (a)
		cout << "YES\n";
	else
		cout << "NO\n";
}

ll gcd(ll a, ll b)
{
	if (b == 0)
		return a;
	else
		return gcd(b, a % b);
}

ll a, b, c;

int main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);

	cin >> a >> b >> c;

	ll g = gcd(a, b);
	g = gcd(g, c);

	cout << (a / g + b / g + c / g - 3);

	return 0;
}