hdu 5572

来源:互联网 发布:碳微球 知乎 编辑:程序博客网 时间:2024/06/10 01:50
#include <iostream>#include <cstdio>#include <string.h>#include <algorithm>#include <map>#include <queue>#include <stdlib.h>#include <cmath>#include <vector>#include <stack>#define clr(x) memset(x,0,sizeof(x))#define clr2(x) memset(x,INF,sizeof(x))#define clr3(x) memset(x,-INF,sizeof(x))#define INF 0x3f3f3f3f#define MAXN 100010#define MAXM 100010#define pb(x) push_back(x)#define ll long long#define ull unsigned long longusing namespace std;double ox,oy,r,ax,ay,vx,vy,bx,by;bool spj(){    double t1,t2;    if (vx!=0)  t1=(bx-ax)/vx;    if (vy!=0)  t2=(by-ay)/vy;    if (t1==t2) return true;    if (vy==0 && ay==by) return true;    if (vx==0 && ax==bx) return true;    return false;}bool judge(){    cin>>ox>>oy>>r>>ax>>ay>>vx>>vy>>bx>>by;    double k1=ax-ox;    double k2=ay-oy;    double a=vx*vx+vy*vy;    double b=2*k1*vx+2*k2*vy;    double c=k1*k1+k2*k2-r*r;    if (ax==bx && ay==by) return true;    if (b*b-4*a*c<0) return spj();    double t1= (-b+sqrt(b*b-4*a*c))/ (2*a) ;    double t2= (-b-sqrt(b*b-4*a*c))/ (2*a) ;    double t=min(t1,t2);    if (t<0) t=max(t1,t2);    if (t<0) return false;    double kx=ax+vx*t;    double ky=ay+vy*t;    double alpha_x=kx-ox;    double alpha_y=ky-oy;    double AK_x=kx-ax;    double AK_y=ky-ay;    double BK_x=kx-bx;    double BK_y=ky-by;    double cosAK= (AK_x*alpha_x+AK_y*alpha_y)/ (sqrt( alpha_x*alpha_x + alpha_y* alpha_y) * sqrt(AK_x*AK_x+AK_y*AK_y) );    double cosBK= (BK_x*alpha_x+BK_y*alpha_y)/ (sqrt( alpha_x*alpha_x + alpha_y* alpha_y) * sqrt(BK_x*BK_x+BK_y*BK_y) );    if (fabs(cosAK-cosBK)<=1e-9) return true;    else return false;}void solve(int Case){    if (judge())        printf("Case #%d: Yes\n",Case);    else        printf("Case #%d: No\n",Case);}int main(){    int T,Case=0;    scanf("%d",&T);    while (T--)        solve(++Case);    return 0;}
0 0
原创粉丝点击