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: Wrong Answer)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
 
int compare_int(const void *a, const void *b)
{
    return *(int*)a - *(int*)b;
}

int min_comp(int min, int a)
{

}
int max_comp(int max, int a)
{
  if(max>a)    return max;
  else    return a;
}


int main()
{
  int K;
  int A,B,C;
  int A2,B2,C2;
  int max_flag;
  int min,max;
  int number;
  int debug_cnt;
//  long long N[101]={};
  int i;
  int cont;
//    int k=0;
  scanf("%d", &A);
  max=A;
  max_flag=1;
  
  scanf("%d", &B);
  if(max<B){
    max=B;
    max_flag=2;
  }
  scanf("%d", &C);
  if(max<C){
  max=C;
    max_flag=3;
  }
//    printf("%d %d %d %d\n", max_flag,A,B,C);
  
  while(1){
//    printf("%d   ", debug_cnt);
//    debug_cnt++;
//    if(debug_cnt==30) break;

    if((A==B)&&(B==C)&&(C==A)) break;
//    printf("%d\n", cont);
    
    if(max_flag==1){
      if(A-B>=2){
        B=B+2;
        cont++;
      }
      if(A-C>=2){
        C=C+2;
        cont++;
      }
      if(((A-B)==1) && ((A-C)==1) ){
        B++;
        C++;
        cont++;
      }
      else if(((A-B)==1)){
        A++;
        B++;
        cont++;
      }
      else if(((A-C)==1)){
        A++;
        C++;
        cont++;
      }
    }
    if(max_flag==2){
      if(B-A>=2){
        A=A+2;
        cont++;
      }
      if(B-C>=2){
        C=C+2;
        cont++;
      }
      if(((B-A)==1) && ((B-C)==1) ){
        A++;
        C++;
        cont++;
      }
      else if(((B-A)==1)){
        A++;
        B++;
        cont++;
      }
      else if(((A-C)==1)){
        B++;
        C++;
        cont++;
      }
  }
  if(max_flag==3){
      if(C-B>=2){
        B=B+2;
        cont++;
      }
      if(C-A>=2){
        A=A+2;
        cont++;
      }
      if(((C-B)==1) && ((C-A)==1) ){
        B++;
        A++;
        cont++;
      }
      else if(((C-B)==1)){
        C++;
        B++;
        cont++;
      }
      else if(((C-A)==1)){
        A++;
        C++;
        cont++;
      }
  }
    
  }
    printf("%d\n", cont);
//  else printf("No\n"); 
return 0;
}