Description
ZZ和GG有很多大事要决定。在他们实在说服不了对方的时候,他们决定猜拳决定胜负。由于石头剪刀布在设计之初存在巨大的缺陷,有极大的可能出现平手!(事实上,某一天,ZZ和GG猜拳猜了一个下午)。在中科院的领导的帮助下,ZZ和GG开始使用“二维矢量夹角大作战”来决定胜负。
“二维矢量夹角大作战”是个很简单的游戏,两个人分别写下两个二维矢量(Zi,Zj)和(Gi,Gj)。取这两个矢量的夹角(小于180度的角叫做夹角)。取这个夹角的角平分线,角平分线逆时针方向的那个矢量,就是赢家。只有当两个矢量共线的时候,才是平局。
这个游戏的平局概率被极大的减小了,ZZ和GG的人生充满了快乐。
不过,这个游戏需要一个程序来帮助判定谁输谁赢。
Input
第0行:一个数T,代表一共T组数据。(即他们比了T次)
第1…2*T行:T组数据。
每组数据分为两行,第一行为(Zi,Zj),第二行为(Gi,Gj),参看样例
Output
第1..T行: 每行一个字符串。
如果ZZ赢了则输出ZZ win!
如果GG赢了则输出:GG win!
如果平手则输出:WOLAIGEQU!
注意,所有标点符号为半角,请不要切换到中文输入法输入。
Sample Input
4
6 0
1 7
1 2
9 7
1 9
1 9
9 5
7 8
Sample Output
GG win!
ZZ win!
WOLAIGEQU!
GG win!
Hint
Gi,Gj,Zi,Zj的绝对值小于3*10^8
看到题我第一眼的想法是座标变换。好吧,这是徒劳的。后来又想把直角座标系转化为极座标,然后比较角度。好吧,这个略嫌麻烦。如果我们用其中一点与原点作直线,可以将平面直角座标系分成两部分,一部分Z赢,一部分G赢,关于两部分的判断,可以用点与直线的关系中常用的公式,求解直线后将点代入判断点的位置,然后根据情况得到答案。
#include<stdio.h> #include<stdlib.h> int main(){ long t,z1,z2,g1,g2,l; long double z,g; scanf("%ld",&t); for(l=0;l<t;l++){ scanf("%ld %ld",&z1,&z2); scanf("%ld %ld",&g1,&g2); if(g1==0){ if(z1==0)printf("WOLAIGEQU!\n"); else if(((z1<0)&&(g2>0))||((z1>0)&&(g2<0)))printf("ZZ win!\n"); else if(((z1>0)&&(g2>0))||((z1<0)&&(g2<0)))printf("GG win!\n"); } else{ g=g2*1.0/g1; z=z2-g*z1; if(z==0)printf("WOLAIGEQU!\n"); else if(((z>0)&&(g1>0))||((z<0)&&(g1<0)))printf("ZZ win!\n"); else if(((z>0)&&(g1<0))||((z<0)&&(g1>0)))printf("GG win!\n"); } } system("PAUSE"); return 0; }