Problem:
Score : 300 points

Problem Statement

You are given three integers A, B and C. Find the minimum number of operations required to make A, B and C all equal by repeatedly performing the following two kinds of operations in any order:

Choose two among A, B and C, then increase both by 1.

Choose one among A, B and C, then increase it by 2.

It can be proved that we can always make A, B and C all equal by repeatedly performing these operations.

Constraints

0 \leq A,B,C \leq 50

All values in input are integers.

Input

Input is given from Standard Input in the following format:

A B C

Output

Print the minimum number of operations required to make A, B and C all equal.

Sample Input 1

2 5 4

Sample Output 1

2

We can make A, B and C all equal by the following operations:

Increase A and C by 1. Now, A, B, C are 3, 5, 5, respectively.

Increase A by 2. Now, A, B, C are 5, 5, 5, respectively.

Sample Input 2

2 6 3

Sample Output 2

5

Sample Input 3

31 41 5

Sample Output 3

23

Solution in C++14 (GCC 5.4.1) (judge verdict: Accepted)

#include <bits/stdc++.h>
#define rep(i,n) for (int i = 0; i < n; ++i)
using namespace std;

int main() {
  int n = 3;
  vector<int> abc(n);
  rep(i,n){cin >> abc.at(i);}

  sort(abc.begin(),abc.end());

  int ans = 0;
  vector<int> even;
  vector<int> odd;
  rep(i,n){
    if(abc.at(i) % 2 == 0){
      even.push_back(abc.at(i));
    } else {
      odd.push_back(abc.at(i));
    }
  }

  if(even.size() == 0 || even.size() == 3){
    ans += ((abc.at(2) - abc.at(0)) / 2);
    ans += ((abc.at(2) - abc.at(1)) / 2);
  } else {
    if(even.size() > odd.size()){
      abc.at(0) = even.at(0) + 1;
      abc.at(1) = even.at(1) + 1;
      abc.at(2) = odd.at(0);
    } else {
      abc.at(0) = odd.at(0) + 1;
      abc.at(1) = odd.at(1) + 1;
      abc.at(2) = even.at(0);
    }
    ans++;
    sort(abc.begin(),abc.end());
    ans += ((abc.at(2) - abc.at(0)) / 2);
    ans += ((abc.at(2) - abc.at(1)) / 2);
  }

  cout << ans << endl;
}