第十七届黑龙江省大学生程序设计竞赛(金牌题)DCollision Detector

题目链接: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";
	}
} 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值