题目链接:https://codeforces.com/gym/103688/problem/D
题意:3个半径为1的小球,O1可以向任何方向移动,如果它撞到小球O2,O2会向与O1相切的方向运动,就是判断一下小球O2能否撞到静止小球O3。
代码:
#include<bits/stdc++.h>
#define lmw ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
using namespace std;
const int N=1e6+10;
int a[N];
struct node{
double x,y;
}ab,bc;
double add(node a,node b){
return a.x*b.x+a.y*b.y;
}
signed main(){
int t;
cin>>t;
while(t--){
double x1,y1,x2,y2,x3,y3;
cin>>x1>>y1>>x2>>y2>>x3>>y3;
double d12=sqrt((y1-y2)*(y1-y2)+(x1-x2)*(x1-x2));
double d23=sqrt((y3-y2)*(y3-y2)+(x3-x2)*(x3-x2));
double cosa=2.0/d12;
double d22=sqrt(d23*d23-4);
double cosb=d22/d23;
double sina=sqrt(d12*d12-4)/d12;
double sinb=2.0/d23;
double cosab=cosa*cosb-sina*sinb;
ab={x2-x1,y2-y1};
bc={x3-x2,y3-y2};
double cosr=add(ab,bc)/d23/d12;
if(cosr-cosab>1e-7) cout<<"yes\n";
else cout<<"no\n";
}
}