题意:
光滑平面,一个刚性小球,一个固定的刚性圆柱体 ,给定圆柱体圆心坐标,半径 ,小球起点坐标,起始运动方向(向量) ,终点坐标 ,问能否到达终点,小球运动中如果碰到圆柱体会反射。

学到了向量模板,写法简洁。

 #include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#define clc(a,b) sizeof(a,b,sizeof(a))
#define LL long long
#include<cmath>
using namespace std;
struct node {
double dis(node);//两点距离 //向量操作
node add(node);//加
double mul(node);//乘
node mul(double);//倍
double abs();//模长
node unt();//单位化
node neg();//取反
double agl(node);//夹角,度数
bool eql(node);//向量相等
int pal(node);//向量平行 double x,y;
};
double node::dis(node a) {
return sqrt(pow(x-a.x,)+pow(y-a.y,));
} node node::add(node a) {
return {x+a.x,y+a.y};
}
double node::mul(node a) {
return x*a.x+y*a.y;
}
node node::mul(double a) {
return {x*a,y*a};
}
node node::neg() {
return {-x,-y};
} double node::abs() {
return sqrt(x*x+y*y);
}
node node::unt() {
double d=this->abs();
return {x/d,y/d};
}
double node::agl(node a) {
return acos((x*a.x+y*a.y)/(this->abs()*a.abs()));
} bool node::eql(node a) {
if(fabs(x-a.x)<1e-&&fabs(y-a.y)<1e-)return ;
return ;
}
int node::pal(node a) {
node u1=this->unt();//判断单位向量
node u2=a.unt();
if(u1.eql(u2))return ;//方向相同
if(u1.eql(u2.neg()))return -;//方向相反
return ;
} double r;
node A,B,C,O;
node AB,AC,AO; int stop() {
double a=B.dis(O);
double b=A.dis(O);
if(a<r||b<r)return ;
double c=A.dis(B);
double p=(a+b+c)/;
double s=sqrt(p*(p-a)*(p-b)*(p-c));
if(c>a&&c>b) {
if(*s/c<r)return ;
return ;
}
return ;
} int only() {
if(AC.pal(AB)==)return ;
return ;
} double root(double a,double b,double c) {
return (-b-sqrt(b*b-*a*c))/(*a);
} void getc() {
double ao=A.dis(O);
double ac=root(,-*ao*cos(AC.agl(AO)),ao*ao-r*r);
C=A.add(AC.unt().mul(ac));
} int fun(node a,node b,node c) {
if(a.add(b).pal(c)==)return ;
return ;
} int jude() {
AB= {B.x-A.x,B.y-A.y};
AO= {O.x-A.x,O.y-A.y};
if(stop())return ;
if(only())return ; getc();
node CB= {B.x-C.x,B.y-C.y};
node OC= {C.x-O.x,C.y-O.y};
if(fun(AC.neg().unt(),CB.unt(),OC.unt()))return ;
return ;
}
int main() {
int T;
scanf("%d",&T);
for(int kase=; kase<=T; kase++) {
scanf("%lf%lf%lf",&O.x,&O.y,&r);
scanf("%lf%lf%lf%lf",&A.x,&A.y,&AC.x,&AC.y);
scanf("%lf%lf",&B.x,&B.y);
printf("Case #%d: ",kase);
if(jude())printf("Yes\n");
else printf("No\n");
}
return ;
}

ACM 2015年上海区域赛A题 HDU 5572An Easy Physics Problem的更多相关文章

  1. UVAlive7141 BombX 14年上海区域赛D题 线段树+离散化

    题意:一个无限大的棋盘, 有n个小兵, 给出了n个兵的坐标, 现在有一个长为width 高为height的炸弹放在棋盘上, 炸弹只能上下左右平移, 不能旋转. 且放炸弹的区域不能含有士兵, 炸弹可以一 ...

  2. UVALive 7148 LRIP 14年上海区域赛K题 树分治

    题意 n个点组成一棵树, 带有点权. 求最长不降的路径的长度, 且路径上最大值最小值之差不超过D. 显然是树分治, 但是分治之后如何维护答案呢. 假设当前重心为g, 分别记录g出发不降路径的长度,以及 ...

  3. Substrings 第37届ACM/ICPC 杭州赛区现场赛C题(hdu 4455)

    http://acm.hdu.edu.cn/showproblem.php?pid=4455 https://icpcarchive.ecs.baylor.edu/index.php?option=c ...

  4. 2019 ICPC 上海区域赛总结

    2019上海区域赛现场赛总结 补题情况(以下通过率为牛客提交): 题号 标题 已通过代码 通过率 我的状态 A Mr. Panda and Dominoes 点击查看 5/29 未通过 B Prefi ...

  5. HDU-5532//2015ACM/ICPC亚洲区长春站-重现赛-F - Almost Sorted Array/,哈哈,水一把区域赛的题~~

    F - Almost Sorted Array Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & ...

  6. 2019~2020icpc亚洲区域赛徐州站H. Yuuki and a problem

    2019~2020icpc亚洲区域赛徐州站H. Yuuki and a problem 题意: 给定一个长度为\(n\)的序列,有两种操作: 1:单点修改. 2:查询区间\([L,R]\)范围内所有子 ...

  7. hdu5080:几何+polya计数(鞍山区域赛K题)

    /* 鞍山区域赛的K题..当时比赛都没来得及看(反正看了也不会) 学了polya定理之后就赶紧跑来补这个题.. 由于几何比较烂写了又丑又长的代码,还debug了很久.. 比较感动的是竟然1Y了.. * ...

  8. HDU 4438 Hunters 区域赛水题

    本文转载于 http://blog.csdn.net/major_zhang/article/details/52197538 2012天津区域赛最水之题: 题意容易读懂,然后就是分情况求出A得分的数 ...

  9. ACM学习历程—HDU5476 Explore Track of Point(平面几何)(2015上海网赛09题)

    Problem Description In Geometry, the problem of track is very interesting. Because in some cases, th ...

随机推荐

  1. Unity3d Shader开发(三)Pass(Color, Material, Lighting )

    材质和灯光参数被用于控制内置顶点光照.顶点光照是Direct3D/OpenGL标准的按每顶点计算的光照模型.光照打开时,光照受材质块,颜色材质和平行高光命令的影响. 每像素光照常被实现为自定义顶点/片 ...

  2. C#.net调用axis2webService

    用C#.net调用axis2webService的时候需要引用web服务, 比如访问地址为:http://111.21.32.213:8080/axis2/services/AdService/get ...

  3. python 内置函数 getattr

    class Getattr_Test(): var_a = 'abc' def methodA(self): var_b = 'xyz' return var_b t = Getattr_Test() ...

  4. js格式化数字,金额按千位逗号分隔,负号用括号

    // 返回数字 function removeFormatMoney(s) { s = s.toString().replace("(","-").replac ...

  5. MyBatis动态SQL语法

    [注:摘自MyBatis官网 ] 1.动态SQL的元素: if choose (when, otherwise) trim (where, set) foreach bind 2.if语句:   &l ...

  6. 汇编语言第二版 程序在dos中执行情况.P86-87

    假设程序要被dos系统加载到sa:0000的内存中,在这个地址的内存开始会有256个字节的PSP程序,用于加载程序和dos系统的通信.ds中的地址为sa. 真正的程序会在这256个字节之后.所以真正程 ...

  7. 面向XX编程

    [一篮饭特稀原创,转载请注明出自http://www.cnblogs.com/wanghafan/p/5033186.html ]  基于面向XX编程的个人理解 面向过程编程 Procedure Or ...

  8. ArcGIS Engine生成等值线(C#)

    原文:ArcGIS Engine生成等值线(C#) 本文介绍c#写的利用ArcGIS Engine生成等值线的方法.c#写的根据雨量站的降雨量值内插出降雨量等值线的功能.做几点说明:根据离散点生成等值 ...

  9. ThinkPHP3.2.3验证码显示、刷新、校验

    显示验证码 首先在Home/Controller下创建一个公共控制器PublicController <?php namespace Home\Controller; use Think\Con ...

  10. Visual Studio 那些隐藏的调试功能(转)

    原文出处:  微软互联网开发支持   Visual Studio 是一个强大的调试工具,里面很多隐藏功能少有人问津,但是在特定场景可以节省你很多时间,本文主要介绍一些Visual Studio调试相关 ...