세 개의 숫자 b와 c가 있다고 가정합니다. 각각, b, c개의 돌이 있는 세 개의 돌 더미가 있습니다. 이러한 작업을 수행할 수 있을 때마다 -
-
첫 번째 더미에서 하나의 돌을 가져오고 두 번째 더미에서 두 개의 돌을 가져옵니다(힙에 필요한 수의 돌이 있을 때)
-
두 번째 더미에서 하나의 돌을 가져오고 세 번째 더미에서 두 개의 돌을 가져옵니다(힙에 필요한 수의 돌이 있을 때)
얼마나 많은 돌을 모을 수 있는지 계산해야 합니까?
따라서 입력이 =3과 같으면; b =4; c =5이면 출력은 9가 됩니다. 두 번의 작업으로 두 번째 힙에서 2개의 스톤을 가져오고 세 번째 힙에서 4개의 스톤을 가져올 수 있기 때문에 총 6개의 스톤이 있고 첫 번째 1개와 두 번째 2개에서 3개의 추가 스톤을 가져옵니다.
단계
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
return (minimum of b and floor of (c / 2) + minimum of a and (b - minimum of b and floor of (c / 2)) / 2) * 3
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
#include <bits/stdc++.h> using namespace std; int solve(int a, int b, int c){ return (min(b, c / 2) + min(a, (b - min(b, c / 2)) / 2)) * 3; } int main(){ int a = 3; int b = 4; int c = 5; cout << solve(a, b, c) << endl; }
입력
3, 4, 5
출력
9