csu 1346: 变色龙

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

4
1 1 1
1 2 3
7 1 2
3 7 5

Sample Output

Yes
No
Yes
No

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值