はじめに
ABC093のC問題の解き方が公式の解答とやり方違ったのでメモで残しておく。
ただ、計算量は明らかに公式の解き方より多くなるので、いい解き方ではない。
問題
引用元
https://atcoder.jp/contests/abc093/tasks/arc094_a
3 つの整数 A,B,C が与えられます。
以下の 2 種類の操作を好きな順で繰り返して A,B,C をすべて等しくするために必要な操作の最小回数を求めてください。
- A,B,C のうち 2 つを選んで、その両方を 1 増やす
- A,B,C のうち 1 つを選んで、その整数を 2 増やす
解き方の方針
実際の提出コード
#include <iostream>
#include <vector>
#include <string>
#include <algorithm> // sort
using namespace std;
int main()
{
vector<long> a(3);
for (long i = 0; i < 3; i++)cin >> a[i];
sort(a.begin(), a.end());
long cnt = 0;
while (true)
{
if (a[0] == a[1] && a[0] == a[2])break;
if (a[2] != a[1])
{
a[2]--;
cnt++;
}
if (a[1]!=a[0])
{
a[0] += 2;
cnt++;
}
sort(a.begin(), a.end());
}
cout << cnt;
}