HDU2277_变色球
生活随笔
收集整理的這篇文章主要介紹了
HDU2277_变色球
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
/*
*題目大意:
* 給定a, b, c,代表三種不同顏色的球的個(gè)數(shù),然后規(guī)定
* 如果把任意兩種不同顏色的球放在一起,那么它們兩個(gè)
* 的顏色將變成第三種顏色的球的顏色。求判斷最后所有的
* 球能否變成同一種顏色,如果能,輸出最小步數(shù)。否則輸
* 出):。
*解題思路:
* 廣搜實(shí)現(xiàn)不了,因?yàn)閍,b,c都是<=1000,標(biāo)志狀態(tài)的數(shù)組太
* 大。其實(shí)就是找規(guī)律。其實(shí)a, b, c由a-x,b-x,c+2x可得到只
* 要三種球的個(gè)數(shù)其中任意兩種球個(gè)數(shù)只差是3的倍數(shù),即可
* 變成同一種顏色。
*解題感想:
* wa了2次,第一次忽略了,其實(shí)只要有兩種滿足三的倍數(shù),
* 那么即使另外一種球的個(gè)數(shù)小于它們只差除以三也是可以
* 變成一種顏色的。第二次wa是因?yàn)闆](méi)有判斷變成三種顏色的球
* 的步數(shù)中求最小。
*/ 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 }
轉(zhuǎn)載于:https://www.cnblogs.com/cchun/archive/2012/05/26/2519276.html
總結(jié)
以上是生活随笔為你收集整理的HDU2277_变色球的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【数论】范数(norm)
- 下一篇: cmd下执行java