题意:参考该文章
分析:昨天到今天wa了26发,题意没搞懂+解方程无限wa,坑点:打了一架以后这个人就获得了一分,所以最终两个人共可获得5分。据说解方程卡精度,无限wa。。。泪崩。。。
代码:
#include <bits/stdc++.h>
#define LL long long
#define FOR(i,x,y) for(int i = x;i < y;++ i)
#define IFOR(i,x,y) for(int i = x;i > y;-- i)
using namespace std;
const double eps = 1e-8;
double t,v1,v2,k;
bool check1(){
double l = 0.0,r = 300.0,mid;
FOR(i,0,100){
mid = (l+r)/2.0;
double x1 = sqrt(300.0*300.0+mid*mid)/v1;
double x2 = (300.0+mid)/v2;
if(x1 - x2 > eps) l = mid;
else r = mid;
}
double y1 = (600.0+mid)/v1,y2 = (600.0-mid)/v2+t;
if(y1 - y2 < eps) return true;
return false;
}
bool check2(){
double l = 0.0,r = 300.0,mid;
FOR(i,0,100){
mid = (l+r)/2.0;
double x1 = sqrt(300.0*300.0+mid*mid)/v1;
double x2 = (900.0-mid)/v2;
if(x1 - x2 > eps) r = mid;
else l = mid;
}
double y2 = (300.0+mid)/v2+t;
double y1 = sqrt((300.0-mid)*(300.0-mid)+300.0*300.0);
y1 = (y1+900.0)/v1;
if(y1 - y2 < eps) return true;
return false;
}
bool work(){
if(v2 - v1 < eps) return true;
if(v2 - sqrt(2.0)*v1 < -eps){
if(check1()) return true;
return false;
}
if(v2 - 3.0*v1 < -eps){
if(check2()) return true;
return false;
}
return false;
}
int main(){
//freopen("test.in","r",stdin);
int T,tCase = 0; scanf("%d",&T);
while(T--){
printf("Case #%d: ",++tCase);
scanf("%lf%lf%lf",&t,&v1,&v2);
if(work()) printf("Yes\n");
else printf("No\n");
}
return 0;
}