在真三国无双里,关羽追杀敌人,关羽的移动速度是v1,敌人的移动速度是v2,两人的初始距离为d,关羽的技能范围为r,持续时间为t2,在一开始关羽就使用了技能,若敌人在技能范围内累计t1时间,则敌人就会被杀死。关羽还有一个一次性物品,可以让敌人的移动速度减半,持续t3时间。关羽不会越过敌人,如果关羽追上了敌人并且移动速度大于敌人,我们可以认为关羽和敌人一直处于一个点上。
分情况讨论...情况比较多...
1. 关羽比敌人跑的快或相等,且敌人开始就在攻击范围内,则不需要使用物品
2. 关羽比敌人跑的快或相等,且敌人开始不在攻击范围内,则一开始就使用物品
3. 关羽比敌人跑的慢,且敌人开始不在攻击范围内,则一开始就使用物品
4. 关羽比敌人跑的慢,且敌人开始在攻击范围内,则等敌人跑到距离关于为r的时候,再使用物品
5. 关羽比敌人跑到慢,且敌人开始在攻击范围内,且敌人速度的一半还比关羽的速度快,则一开始就使用物品。
#include <cstdio>
const double eps=1e-9;
double d,r,t1,t2,t3,v1,v2;
int main() {
int t;
scanf("%d",&t);
while (t--) {
scanf("%lf%lf%lf%lf%lf%lf%lf",&d,&r,&t1,&t2,&t3,&v1,&v2);
if (v2<v1-eps) {
if (d<=r+eps) {
if (t1<=t2+eps) printf("yes\n");
else printf("no\n");
} else {
double dd=t3*(v1-v2/2);
if (d-dd>r+eps) {
double time1=t3+(d-dd-r)/(v1-v2);
if (time1+t1<=t2+eps) printf("yes\n");
else printf("no\n");
} else {
double time1=(d-r)/(v1-v2/2);
if (time1+t1<=t2+eps) printf("yes\n");
else printf("no\n");
}
}
} else if (v2<v1+eps) {
if (d<=r+eps) {
if (t1<=t2+eps) printf("yes\n");
else printf("no\n");
} else {
double dd=t3*(v1-v2/2);
if (d-dd-eps>r) {
printf("no\n");
} else {
double time1=(d-r)/(v1-v2/2);
if (time1+t1<=t2+eps) printf("yes\n");
else printf("no\n");
}
}
} else {
if (d<=r+eps) {
double time2=(r-d)/(v2-v1);
if (v1-v2/2>eps) {
time2+=t3;
double dd=t3*(v1-v2/2);
if (dd>r-eps) dd=r;
time2+=dd/(v2-v1);
} else if (v1-v2/2>-eps) {
time2+=t3;
} else {
time2=(r-d)/(v2/2-v1);
if (time2>t3+eps) {
time2=t3+(r-d-t3*(v2/2-v1))/(v2-v1);
}
}
if (time2>t2) time2=t2;
if (time2>=t1-eps) printf("yes\n");
else printf("no\n");
} else {
if (v1-v2/2<=eps) printf("no\n");
else {
double dd=t3*(v1-v2/2),time1,time2;
if (dd+r<d-eps) printf("no\n");
else {
time1=(d-r)/(v1-v2/2);
if (dd>d-eps) dd=r;
else dd=dd-d+r;
time2=t3+dd/(v2-v1);
if (time2>t2) time2=t2;
if (time2-time1>=t1-eps) printf("yes\n");
else printf("no\n");
}
}
}
}
}
return 0;
}