csu 1346: 变色龙

来源:互联网 发布:淘宝卖家正在被处罚 编辑:程序博客网 时间:2024/04/29 18:53

1346: 变色龙

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 271  Solved: 86
[Submit][Status][Web Board]

Description

    在一个美丽的小岛上住着一群变色龙:其中有X只变色龙是红色的,Y只变色龙是绿色的,Z只变色龙是蓝色的。
    每个时刻会有两只不同颜色的变色龙相遇,相遇后他们会同时变成第三种颜色。比如,如果一只红色的变色龙和一只蓝色的变色龙相遇了,他们就会同时变成绿色的变色龙,如果一只绿色的变色龙和一只蓝色的变色龙相遇了,他们就会同时变成红色的变色龙,等等。
    那么最后是否有可能所有的变色龙都是同一种颜色呢?

Input

    输入的第一行包含一个整数T (1 <= T <= 100),表示接下来一共有T组测试数据。
    每组数据占一行,包含三个整数XYZ (1 <= XYZ <= 109),含义同上。

Output

    对于每组测试数据,如果最后有可能所有的变色龙都是同一种颜色,用一行输出“Yes”(不包括引号),否则输出“No”(不包括引号)。

Sample Input

41 1 11 2 37 1 23 7 5

Sample Output

YesNoYesNo

HINT

    对于样例1:其中一种可能的变化方式为:1 1 1 --> 0 2 0。

    对于样例3:其中一种可能的变化方式为:7 1 2 --> 6 3 1 --> 5 5 0 --> 4 4 2 --> 3 3 4 --> 2 2 6 --> 1 1 8 --> 0 0 10。

Source

中南大学第一届长沙地区程序设计邀请赛


分析:
模拟题,感觉还是需要一点智商的。就是对数字的观察啦。需要发现mod3相等这个关系。然后代码就出来了。
抓住数论不变量。因为最后的结果肯定是先将两种变色龙的数量变成相同,然后他们就可以变成第三种变色龙了。假设x,y变成z,则可能的情况有:x,y->z,此时x--,y--,z+=2,x,y的差不变;x,z->y,x--,y+=2,此时x,y的增加或减少3;其他情况类似。故x,y的差肯定要是3的倍数才能变化成功。至于z,完全不用管,不过是个摆设。
ac代码:
#include <iostream>
#include<cstdio>
using namespace std;
int main()
{
    int t,x,y,z;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d%d",&x,&y,&z);
        printf(((x-y)%3&&(y-z)%3&&(z-x)%3)?"No\n":"Yes\n");


    }
    return 0;
}
0 0
原创粉丝点击