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 (GCC 5.4.1) (judge verdict: Accepted)

#include <stdio.h>
#include <string.h>

int MakeEqual3Figures(int x, int y, int z)
{
    int countone = 0;
    int counttwo = 0;
    int resultone = 0;

    while (x != z)
    {
        x += 2;
        countone++;
    }

    while (y != z)
    {
        y += 2;
        counttwo++;
    }

    resultone = countone + counttwo;
    return resultone;
}

void OddEvenCheck(int p, int q, int r)
{
    int OddorEvenOne = (q - p) % 2;
    int OddorEvenTwo = (r - q) % 2;

    if (OddorEvenOne == 0 && OddorEvenTwo == 0)
    {
        printf("%d", MakeEqual3Figures(p, q, r));
    }

    else if (OddorEvenOne != 0 && OddorEvenTwo != 0)
    {
        p = p + 1;
        r = r + 1;
        printf("%d", MakeEqual3Figures(p, q, r) + 1);
    }

    else if (OddorEvenOne == 0 && OddorEvenTwo != 0)
    {
        p = p + 1;
        q = q + 1;
        printf("%d", MakeEqual3Figures(p, q, r) + 1);
    }

    else if (OddorEvenOne != 0 && OddorEvenTwo == 0)
    {
        q = q + 1;
        r = r + 1;
        printf("%d", MakeEqual3Figures(p, q, r) + 1);
    }
}

void Compare3Figures(int a, int b, int c)
{
    if (b < a && a < c)
    {
        int tmp = a;
        a = b;
        b = tmp;
    }

    else if (b < a && c < b)
    {
        int tmptwo = a;
        a = c;
        c = tmptwo;
    }

    else if (a < b && c < b && a < c)
    {
        int tmpthree = b;
        b = c;
        c = tmpthree;
    }

    else if (a <= b && c <= a)
    {
        int tmpfour = a;
        a = c;
        c = b;
        b = tmpfour;
    }

    else if (b <= a && b <= c && c <= a)
    {
        int tmpfive = a;
        a = b;
        b = c;
        c = tmpfive;
    }

    else if (a == c && a < b)
    {
        int tmpsix = b;
        b = c;
        c = tmpsix;
    }

    OddEvenCheck(a, b, c);
}

int main(int argc, char *argv[])
{

    int A = 0;
    int B = 0;
    int C = 0;

    do
    {
        scanf("%d", &A);
    } while (A < 0 || 50 < A);

    do
    {
        scanf("%d", &B);
    } while (B < 0 || 50 < B);

    do
    {
        scanf("%d", &C);
    } while (C < 0 || 50 < C);

    Compare3Figures(A, B, C);

    printf("\n");
}