/*
*题目大意:
* 给定a, b, c,代表三种不同颜色的球的个数,然后规定
* 如果把任意两种不同颜色的球放在一起,那么它们两个
* 的颜色将变成第三种颜色的球的颜色。求判断最后所有的
* 球能否变成同一种颜色,如果能,输出最小步数。否则输
* 出):。
*解题思路:
* 广搜实现不了,因为a,b,c都是<=1000,标志状态的数组太
* 大。其实就是找规律。其实a, b, c由a-x,b-x,c+2x可得到只
* 要三种球的个数其中任意两种球个数只差是3的倍数,即可
* 变成同一种颜色。
*解题感想:
* wa了2次,第一次忽略了,其实只要有两种满足三的倍数,
* 那么即使另外一种球的个数小于它们只差除以三也是可以
* 变成一种颜色的。第二次wa是因为没有判断变成三种颜色的球
* 的步数中求最小。
*/
1 #include <iostream>
2 #include <cmath>
3 using namespace std;
4
5 int main(void)
6 {
7 #ifndef ONLINE_JUDGE
8 freopen("in.txt", "r", stdin);
9 #endif
10
11 int a[3];
12 while(scanf("%d %d %d", &a[0], &a[1], &a[2]) == 3)
13 {
14 bool flag = false;
15 int ans = INT_MAX;
16 //for(int i = 0; i < 3; i++)
17 {
18 int temp = abs(a[0] - a[1]);
19 if(temp % 3 == 0)
20 {
21 int t = temp / 3;
22 flag = true;
23 t = (a[0] + a[1] + t) / 2 + t;
24 if(ans > t)
25 ans = t;
26 }
27
28 temp = abs(a[0] - a[2]);
29 if(temp % 3 == 0)
30 {
31 int t = temp / 3;
32 flag = true;
33 t = (a[0] + a[2] + t) / 2 + t;
34 if(ans > t)
35 ans = t;
36 }
37
38 temp = abs(a[1] - a[2]);
39 if(temp % 3 == 0)
40 {
41 int t = temp / 3;
42 flag = true;
43 t = (a[1] + a[2] + t) / 2 + t;
44 if(ans > t)
45 ans = t;
46 }
47 }
48 if(flag == false)
49 puts("):");
50 else
51 printf("%d\n", ans);
52 }
53 return 0;
54 }