HDU2277_变色球
生活随笔
收集整理的這篇文章主要介紹了
HDU2277_变色球
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/*
*題目大意:
* 給定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 }
轉載于:https://www.cnblogs.com/cchun/archive/2012/05/26/2519276.html
總結
以上是生活随笔為你收集整理的HDU2277_变色球的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【数论】范数(norm)
- 下一篇: cmd下执行java