Problem I:In exchange balloon with us!
Time Limit:1000MS
Total Submit:1 Accepted:1
Description
所有的ACMER都知道,比赛中气球是他们的最爱,因为气球的数量象征着他们过掉的题目的数量。一天,比赛结束,大家开始了一场换气球游戏。
现在只有红,黄,蓝三种颜色的气球。规则为两个不同颜色的气球可以换成同等数量的第三种颜色的气球。例如:1红+1黄=2蓝,交换的次数没有限制,现在知道你所拥有的每种颜色气球的数量,问是否能通过交换达到拥有一种颜色气球的状态?
Input
输入数据有多个case,每个case输入为一行,依次为拥有的红色,黄色,蓝色气球的数量(气球很贵,每种数量不会超过10^5)。
Output
如果通过上述规则可以将气球换成一种颜色的气球,输出”Yes”,并且空格后给出转化后你拥有的气球的颜色编号(红:1 黄:2 蓝:3)如果有多种转化结果,输出编号小的那个,否则输出”No”。
Sample Input
1 3 1 2 2 2
Sample Output
Yes 2 Yes 1#include<cstdio> #include<cstring> #include<cmath> #include<iostream> #include<string> #include<cstdlib> #include<ctime> #include<vector> #include<queue> #include<stack> #include<map> #include<set> #include<algorithm> using namespace std; int main() { int a,b,c; while(scanf("%d%d%d",&a,&b,&c)!=EOF) { if(a==0&&b==0&&c==0) printf("No\n"); else if(b==0 && c==0) printf("Yes 1\n"); else if(a==0 && c==0) printf("Yes 2\n"); else if(a==0 && b==0) printf("Yes 3\n"); else if(abs(b-c)%3==0) printf("Yes 1\n"); else if(abs(a-c)%3==0) printf("Yes 2\n"); else if(abs(a-b)%3==0) printf("Yes 3\n"); else printf("No\n"); } return 0; //比如a=INF,b=m,(c-b)/3=k,那么c=m+3*k,a和c去交换b,n步之后, // b=m+2*n,c=m+3*k-n, //那么此时令b=c,那么m+2*n=m+3*k-n,化简为n=k,显然n有解 ,那么就 //一定可以把b和c换成a(知道为什么吗?不知道就自己想)。你可能还会担心a //一定会大于n吗?其实这个不重要,当你还没有交换n步就发现a为0了, //把b和c换成a不就让a=2了嘛,并且b和c同时减少1,对他们等于判断是 //没有影响的,那么就知道这道题最少需要的步数,当然这里题目没有要求 }//YSF友情赞助!!!!