zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    APUE习题3.2用dup实现dup2以及shell中重定向符号的使用
    如何理解git checkout -- file和git reset HEAD -- file
    bash中通过设置PS1变量改变提示符颜色
    Ubuntu中root的默认密码
    Kali中装中文输入法小企鹅
    Find the Top 10 commands in your linux box!
    简明awk教程(Simple awk tutorial)
    PHP错误解决:Fatal error: Unknown: Failed opening required ...
    简单的端口扫描器(TCP connect)
    c# 爬虫(三) 文件上传
  • 原文地址:https://www.cnblogs.com/cchun/p/2519276.html
Copyright © 2011-2022 走看看