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

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

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #include<iostream>
  5. #define clc(a,b) sizeof(a,b,sizeof(a))
  6. #define LL long long
  7. #include<cmath>
  8. using namespace std;
  9. struct node {
  10. double dis(node);//两点距离
  11.  
  12. //向量操作
  13. node add(node);//加
  14. double mul(node);//乘
  15. node mul(double);//倍
  16. double abs();//模长
  17. node unt();//单位化
  18. node neg();//取反
  19. double agl(node);//夹角,度数
  20. bool eql(node);//向量相等
  21. int pal(node);//向量平行
  22.  
  23. double x,y;
  24. };
  25. double node::dis(node a) {
  26. return sqrt(pow(x-a.x,)+pow(y-a.y,));
  27. }
  28.  
  29. node node::add(node a) {
  30. return {x+a.x,y+a.y};
  31. }
  32. double node::mul(node a) {
  33. return x*a.x+y*a.y;
  34. }
  35. node node::mul(double a) {
  36. return {x*a,y*a};
  37. }
  38. node node::neg() {
  39. return {-x,-y};
  40. }
  41.  
  42. double node::abs() {
  43. return sqrt(x*x+y*y);
  44. }
  45. node node::unt() {
  46. double d=this->abs();
  47. return {x/d,y/d};
  48. }
  49. double node::agl(node a) {
  50. return acos((x*a.x+y*a.y)/(this->abs()*a.abs()));
  51. }
  52.  
  53. bool node::eql(node a) {
  54. if(fabs(x-a.x)<1e-&&fabs(y-a.y)<1e-)return ;
  55. return ;
  56. }
  57. int node::pal(node a) {
  58. node u1=this->unt();//判断单位向量
  59. node u2=a.unt();
  60. if(u1.eql(u2))return ;//方向相同
  61. if(u1.eql(u2.neg()))return -;//方向相反
  62. return ;
  63. }
  64.  
  65. double r;
  66. node A,B,C,O;
  67. node AB,AC,AO;
  68.  
  69. int stop() {
  70. double a=B.dis(O);
  71. double b=A.dis(O);
  72. if(a<r||b<r)return ;
  73. double c=A.dis(B);
  74. double p=(a+b+c)/;
  75. double s=sqrt(p*(p-a)*(p-b)*(p-c));
  76. if(c>a&&c>b) {
  77. if(*s/c<r)return ;
  78. return ;
  79. }
  80. return ;
  81. }
  82.  
  83. int only() {
  84. if(AC.pal(AB)==)return ;
  85. return ;
  86. }
  87.  
  88. double root(double a,double b,double c) {
  89. return (-b-sqrt(b*b-*a*c))/(*a);
  90. }
  91.  
  92. void getc() {
  93. double ao=A.dis(O);
  94. double ac=root(,-*ao*cos(AC.agl(AO)),ao*ao-r*r);
  95. C=A.add(AC.unt().mul(ac));
  96. }
  97.  
  98. int fun(node a,node b,node c) {
  99. if(a.add(b).pal(c)==)return ;
  100. return ;
  101. }
  102.  
  103. int jude() {
  104. AB= {B.x-A.x,B.y-A.y};
  105. AO= {O.x-A.x,O.y-A.y};
  106. if(stop())return ;
  107. if(only())return ;
  108.  
  109. getc();
  110. node CB= {B.x-C.x,B.y-C.y};
  111. node OC= {C.x-O.x,C.y-O.y};
  112. if(fun(AC.neg().unt(),CB.unt(),OC.unt()))return ;
  113. return ;
  114. }
  115. int main() {
  116. int T;
  117. scanf("%d",&T);
  118. for(int kase=; kase<=T; kase++) {
  119. scanf("%lf%lf%lf",&O.x,&O.y,&r);
  120. scanf("%lf%lf%lf%lf",&A.x,&A.y,&AC.x,&AC.y);
  121. scanf("%lf%lf",&B.x,&B.y);
  122. printf("Case #%d: ",kase);
  123. if(jude())printf("Yes\n");
  124. else printf("No\n");
  125. }
  126. return ;
  127. }

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. LBS地理位置距离计算方法之geohash算法

    随着移动终端的普及,很多应用都基于LBS功能,附近的某某(餐馆.银行.妹纸等等).基础数据中,一般保存了目标位置的经纬度:利用用户提供的经纬度,进行对比,从而获得是否在附近.这里需要在设置出一个字段, ...

  2. 机器学习实战:数据预处理之独热编码(One-Hot Encoding)

    问题由来 在很多机器学习任务中,特征并不总是连续值,而有可能是分类值. 例如,考虑一下的三个特征: ["male", "female"] ["from ...

  3. git fork同步原作者

    从github上获取源代码,一种是直接下载,但是无法改动后提交. 一种是fork一下,但是和原作者同步麻烦. 所以我找到了四个命令,解决同步问题. 以后建议大家fork一下,主要是哪天对源码熟悉了,想 ...

  4. PL/SQL — 变长数组

    PL/SQL变长数组是PL/SQL集合数据类型中的一种,其使用方法与PL/SQL嵌套表大同小异,唯一的区别则是变长数组的元素的最大个数是有限制的.也即是说变长数组的下标固定下限等于1,上限可以扩展.下 ...

  5. MVC-ActionResult解说

    HttpNotFoundResult: 专门用来响应Http404找不到网页的错误,在System.Web.Mvc.Controller类别中内建了一个HttpNotFound()方法,可以很方便的回 ...

  6. CODEVS 1069关押罪犯

    题目描述 Description S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极 不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用“怨 ...

  7. spring ioc aop 原理

    spring ioc aop 原理 spring ioc aop 的原理 spring的IoC容器是spring的核心,spring AOP是spring框架的重要组成部分. 在传统的程序设计中,当调 ...

  8. DEPRECATED: Use of this script to execute hdfs command is deprecated.

    DEPRECATED: Use of this script to execute hdfs command is deprecated. 本人安装的hadoop版本是2.4.0的,但每次执行命令时都 ...

  9. C++的构造函数和析构函数

    1.构造函数和析构函数为什么没有返回值? 构造函数和析构函数是两个非常特殊的函数:它们没有返回值.这与返回值为void的函数显然不同,后者虽然也不返回任何值,但还可以让它做点别的事情,而构造函数和析构 ...

  10. portal、portlet、portlet容器三个概念

    什么是portal Portlet规范中是这样定义portal的: A portal is a web based application that –commonly- provides perso ...