4日目です。今日の問題はこちら。
Difficultyは302(灰)です。
(AtCoder Problemsより)
余裕がある人は先に解いてから読んでください。
提出コードと考えたこと
#include <bits/stdc++.h>
using namespace std;
int main(){
int a,b,c;
cin >> a >> b >> c;
int x = max(a,max(b,c));
int value = 3 * x - (a + b + c);
int ans;
if(value % 2 == 0) ans = value / 2;
else ans = (value + 3) / 2;
cout << ans << endl;
return 0;
}
操作を行なってすべての数が \( x \) になったとき、それまでに加えた数の総和はvalueの値になります。数を加えることしかできませんから \(x \ge \max \left\{ a,b,c \ \right\} \) です。
1回の操作で数の総和は2だけ増えるので、valueは偶数である必要があります。また、操作回数はvalue\( / 2 \) になります。
よって \( x = \max \{ a,b,c \ \} , \max \{ a,b,c \ \} + 1\) のどちらかが、操作回数が最小になるような \( x \) です。
あとはvalueの偶奇で場合を分けて答えを求めます。
終わりに
今回も解けるまでに結構時間をかけてしまったので、まだまだ演習が必要そうです。また、部分的に説明が不十分なところがあるので追記すると思います。
コメント