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

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

 #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. 手动将MySQL服务安装到windows中

    我的系统是win7 x64,mysql版本5.6 (网上的老教程很多都没用了,版本太旧,这是我自己总结出来的方法) 下载zip包的mysql可以获得最新版本,还可以免安装,好处多多,但是要把mysql ...

  2. python引入导入自定义模块和外部文件

    参考:http://blog.csdn.net/devil_2009/article/details/15816237 项目中想使用以前的代码,或者什么样的需求致使你需要导入外部的包 如果是web 下 ...

  3. C语言自带的快速排序(qsort)函数使用方法

    感觉打快排太慢了,找到了c语言自带的函数.这函数用起来没c++的方便,不过也够了. 函数名称:qsort,在头文件:<stdlib.h>中 不多说,上代码: #include <st ...

  4. A Full Hardware Guide to Deep Learning

    A Full Hardware Guide to Deep Learning Deep Learning is very computationally intensive, so you will ...

  5. csuoj 1351: Tree Counting

    这是一个动态规划的题: 当初想到要用dp,但是一直想不到状态转移的方程: 题解上的原话: 动态规划,设 g[i]表示总结点数为 i 的方案种数,另设 f[i][j]表示各个孩子的总结点数为i,孩子的个 ...

  6. 如何使用 Java8 实现观察者模式?(上)

    [编者按]本文作者是 BAE 系统公司的软件工程师 Justin Albano.在本篇文章中,作者通过在 Java8 环境下实现观察者模式的实例,进一步介绍了什么是观察者模式.专业化及其命名规则,供大 ...

  7. 继续完成昨天的第一个点:更改DJANGO的ADMIN后台的表单显示

    遇到的问题是MANYTOMANY的选项太多,默认的DJANGO一个多选框搞得人蛋疼, 于是作了一个扩展,不是最好的,但方便多啦.. 也是在昨天说过的各个app的admin.py里操作: from dj ...

  8. 你所不知道的string.xml

    String 能被应用程序或者其他资源文件(比如layout XML)引用的单个字符串. 注意:字符串是简单类型资源,是用名称(name)(而非XML文件名)来直接引用的.因此,在一个XML文件里,可 ...

  9. Android java.net.SocketException四大异常解决方案

    java.net.SocketException如何才能更好的使用呢?这个就需要我们先要了解有关这个语言的相关问题.希望大家有所帮助.那么我们就来看看有关java.net.SocketExceptio ...

  10. 用APP赚钱(转)

    英文原文:MAKING MONEY ON APPS 做为半个 iOS 开发的一家公司,我时不时地考虑如何用 APP 赚钱.最近由Brent Simmons 和 Jared Sinclair 的文章挑起 ...