小游戏
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
3
-
描述
-
Ciel 和 他的好朋友 Liss 玩一个角色游戏。他们都控制一个英雄在直线上移动,开始Ciel的英雄在x点,每次移动距离范围为[0, Mov1]. Liss 的英雄在y点,每次移动距离范围为[0, Mov2]
Ciel和 Liss 轮流控制自己的英雄移动(Ciel 先手),英雄每次移动距离必须在自己的范围内且是整数。当Cile的英雄落在Liss的英雄当前所在位置,则Liss的英雄被击杀,Ciel获胜。反之Liss获胜。
-
输入
-
多则测试数据。
每组输入数据占一行,一次输入四个整数 x,Mov1 , y, Mov2
数据范围在 [0,100 000 000]
输出
- 如Ciel获胜输出 Ciel,反之输出Liss, 都不能获胜则输出Draw 样例输入
-
0 150 5 150 0 5 10 5 5 4 15 20
样例输出
-
Ciel Draw
Liss
-
/* 分析:1、首先应该考虑第一回合会不会分出胜负,若mov1>=d,那么Ciel赢,若mov2>=d+mov1,Liss赢(Liss后手,要加mov1) 2、若第一回合分不出胜负,那么需要比较mov1,mov2 (1)mov1==mov2,一定是平局 (2)mov1>mov2,Ciel走得快,那么Ciel如果想赢,必须在追着Liss走了x步时能打到Liss,但是又要防止Liss在x-1步时反向走倒打一耙,所以需要满足条件, mov1-mov2>mov2。也可以理解为,当Ciel走到和Liss距离为mov1时,Liss又会走mov2,那么Ciel必须保证第x步走到和Liss距离为mov1-mov2,然后Liss走第x步走过mov2,然后这时轮到Ciel走第x+1步,此时距离为mov1,那么一走一打刚好打到Liss,其中,当Ciel走完第x步而Liss未走第x步时,二者距离最近,为mov1-mov2,必须保证这个距离大于mov2,否则Liss就会倒打一耙,就是平局。 (3)mov1<mov2,和(2)同理 */ #include <stdio.h> int main() { int x, y, movx, movy; while(scanf("%d%d%d%d", &x, &movx, &y, &movy) != EOF) { if((x > y ? x-y : y-x) <= movx) { printf("Ciel\n"); } else if(movx == movy) { printf("Draw\n"); } else { if(movx > movy) { if(movx > 2*movy) //能防止倒打一耙而且又能打到的最小距离为2*movy { printf("Ciel\n"); } else { printf("Draw\n"); } } else { if(movy > 2*movx) //与上面同理 { printf("Liss\n"); } else { printf("Draw\n"); } } } } return 0; }
-
多则测试数据。