Codeforces 32E Hide-and-Seek 乞讨2关于镜面反射点 计算几何
主题链接:点击打开链接
必须指出的是,反射镜和2个人共线是不是障碍,但根据该壁其他情况
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<string.h>
#include<math.h>
using namespace std;
#define point Point
const double eps = 1e-8;
const double PI = acos(-1.0);
double ABS(double x){return x>0?x:-x;}
int sgn(double x){if(fabs(x) < eps)return 0;if(x < 0)return -1;else return 1;
}
struct Point
{double x,y;void put(){printf("(%.0lf,%.0lf)\n",x,y);}Point(){}Point(double _x,double _y){x = _x;y = _y;}Point operator -(const Point &b)const{return Point(x - b.x,y - b.y);}//叉积double operator ^(const Point &b)const{return x*b.y - y*b.x;}//点积double operator *(const Point &b)const{return x*b.x + y*b.y;}//绕原点旋转角度B(弧度值),后x,y的变化void transXY(double B){double tx = x,ty = y;x = tx*cos(B) - ty*sin(B);y = tx*sin(B) + ty*cos(B);}
};
struct Line
{
Point s,e;
void put(){s.put();e.put();}
Line(){}
Line(Point _s,Point _e)
{
s = _s;e = _e;
}
//两直线相交求交点
//第一个值为0表示直线重合,为1表示平行,为0表示相交,为2是相交
//仅仅有第一个值为2时,交点才有意义
pair<int,Point> operator &(const Line &b)const{Point res = s;if(sgn((s-e)^(b.s-b.e)) == 0){if(sgn((s-b.e)^(b.s-b.e)) == 0)return make_pair(0,res);//重合else return make_pair(1,res);//平行}double t = ((s-b.s)^(b.s-b.e))/((s-e)^(b.s-b.e));res.x += (e.x-s.x)*t;res.y += (e.y-s.y)*t;return make_pair(2,res);
}
};
double dist(Point a,Point b){return sqrt((a-b)*(a-b));}
//*推断线段相交
bool inter(Line l1,Line l2)
{returnmax(l1.s.x,l1.e.x) >= min(l2.s.x,l2.e.x) &&max(l2.s.x,l2.e.x) >= min(l1.s.x,l1.e.x) &&max(l1.s.y,l1.e.y) >= min(l2.s.y,l2.e.y) &&max(l2.s.y,l2.e.y) >= min(l1.s.y,l1.e.y) &&sgn((l2.s-l1.e)^(l1.s-l1.e))*sgn((l2.e-l1.e)^(l1.s-l1.e)) <= 0 &&sgn((l1.s-l2.e)^(l2.s-l2.e))*sgn((l1.e-l2.e)^(l2.s-l2.e)) <= 0;
}
point symmetric_point(point p1, point l1, point l2)
{point ret;if(ABS(l1.x-l2.x)<eps){ret.y = p1.y;ret.x = 2*l1.x - p1.x;return ret;}if(ABS(l1.y-l2.y)<eps) {ret.x = p1.x;ret.y = 2*l1.y - p1.y;return ret;}if (l1.x > l2.x - eps && l1.x < l2.x + eps){ret.x = (2 * l1.x - p1.x);ret.y = p1.y;}else{double k = (l1.y - l2.y ) / (l1.x - l2.x);ret.x = (2*k*k*l1.x + 2*k*p1.y - 2*k*l1.y - k*k*p1.x + p1.x) / (1 + k*k);ret.y = p1.y - (ret.x - p1.x ) / k;}return ret;
}
bool gongxian(Point a, Point b, Point c){return ABS((a.y-b.y)*(a.x-c.x) - (a.y-c.y)*(a.x-b.x))<eps;
}
Point a,b;
Line peo, wal, mir;
bool work(){
// peo.put(); wal.put();if((gongxian(a,mir.s,mir.e)&&gongxian(b,mir.s,mir.e))) {// a.put(); b.put(); mir.put(); puts("共线了");return !inter(wal,peo);}else if(inter(mir,peo))return false;if(!inter(wal, peo)) return true;
// puts("GEGE");if(inter(wal,mir))return false;Point c = symmetric_point(b,mir.s,mir.e);Point d = symmetric_point(a,mir.s,mir.e);
// c.put(); d.put();Line ac, bd;ac.s = a, ac.e = c;bd.s = b, bd.e = d;if(!inter(ac,mir))return false;if(!inter(bd,mir))return false;if(inter(ac,wal))return false;if(inter(bd,wal))return false;return true;
}
int main(){while(~scanf("%lf %lf",&a.x,&a.y)){scanf("%lf %lf",&b.x,&b.y);scanf("%lf %lf %lf %lf", &wal.s.x, &wal.s.y, &wal.e.x, &wal.e.y);scanf("%lf %lf %lf %lf", &mir.s.x, &mir.s.y, &mir.e.x, &mir.e.y);peo.s = a, peo.e = b;work()?
puts("YES"):puts("NO"); } return 0; }
版权声明:本文博主原创文章,博客,未经同意不得转载。
Codeforces 32E Hide-and-Seek 乞讨2关于镜面反射点 计算几何相关推荐
- 洛谷 P2951 [USACO09OPEN]捉迷藏Hide and Seek
题目描述 Bessie is playing hide and seek (a game in which a number of players hide and a single player ( ...
- BUUCTF [HCTF 2018] Hide and seek
BUUCTF [HCTF 2018] Hide and seek 考点: 软连接读取任意文件 Flask伪造session /proc/self/environ文件获取当前进程的环境变量列表 rand ...
- BUUCTF:[HCTF 2018]Hide and seek
BUUCTF:[HCTF 2018]Hide and seek 参考:https://www.jianshu.com/p/d20168da7284 先随便输入账号密码登录 提示我们上传zip文件 上传 ...
- BZOJ1941:[SDOI2010]Hide and Seek(K-D Tree)
Description 小猪iPig在PKU刚上完了无聊的猪性代数课,天资聪慧的iPig被这门对他来说无比简单的课弄得非常寂寞,为了消除寂寞感,他决定和他的好朋友giPi(鸡皮)玩一个更加寂寞的游戏- ...
- bzoj1941 [Sdoi2010]Hide and Seek 线段树
这个题其实应该算4个二维偏序,因为枚举每个点可以根据公式分成4个象限,4种计算方式,所以就考虑怎么求x和y的大小关系集合 首先,按x排序再枚举,可以保证后面的x大于前面的x,就相当于分成了两部分,剩下 ...
- BZOJ 1941: [Sdoi2010]Hide and Seek KDtree + 估价函数
Description 小猪iPig在PKU刚上完了无聊的猪性代数课,天资聪慧的iPig被这门对他来说无比简单的课弄得非常寂寞,为了消除寂寞感,他决定和他的好朋友giPi(鸡皮)玩一个更加寂寞的游戏- ...
- hide and seek openai
https://github.com/miyosuda/evolution_and_ai/tree/master/multi_agent_emergence My conda env: hide-an ...
- B3402 [Usaco2009 Open]Hide and Seek 捉迷藏 最短路
直接最短路板子,dij堆优化. 题干: 题目描述贝茜在和约翰玩一个"捉迷藏"的游戏.她正要找出所有适合她躲藏的安全牛棚.一共有N(2≤N≤20000)个牛棚,被编为1到N号.她知道 ...
- 网厨管理java_点菜网---Java开源生鲜电商平台-技术选型(源码可下载)
centos 安装php7.0.2 PHP7.0正式版已经在2015年11月份左右发布,目前是PHP7.0.2版本,本人最早是从2015年8月php7的第一个测试版跟起,现在正式版发布. linux版 ...
最新文章
- oracle删除数据文件
- 只要十步,你就可以应用表达式树来优化动态调用
- Android -- 自定义权限
- Xcode7,ios9 issue ,warning合集
- 软考系统架构师笔记-综合知识重点(一)
- python接口自动化(三十一)--html测试报告通过邮件发出去——下(详解)
- ExtJS学习之路第三步:理解引擎之下,ExtJS4中的类
- python中IO多路复用、协程
- AI实战:基于AdvancedEAST的自然场景图像文本检测算法
- 手机模拟器自带root_VMOS Pro Android 手机上的模拟器 (手机版虚拟机)
- 服务器sni协议,关于 https 的 SNI(Sever Name Indication) 问题记录
- 浅谈聚合支付系统的安全性
- LoRa:SX1278
- 地球币earthcoin表情包征图大赛正式筹备准备中
- 订货宝 html源码,订货宝新功能,代客下单等一大波移动管理端功能
- 文章阅读总结:GPT
- mysql inet aton ipv6_mysql 使用inet_aton和inet_ntoa处理ip地址数据
- fusion 360自定义螺纹配置文件下载以及安装方法
- 0001-Flink安装---Flink安装(Standlone模式)
- 第四章-linux内核裁剪与移植