主题链接:点击打开链接

必须指出的是,反射镜和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关于镜面反射点 计算几何相关推荐

  1. 洛谷 P2951 [USACO09OPEN]捉迷藏Hide and Seek

    题目描述 Bessie is playing hide and seek (a game in which a number of players hide and a single player ( ...

  2. BUUCTF [HCTF 2018] Hide and seek

    BUUCTF [HCTF 2018] Hide and seek 考点: 软连接读取任意文件 Flask伪造session /proc/self/environ文件获取当前进程的环境变量列表 rand ...

  3. BUUCTF:[HCTF 2018]Hide and seek

    BUUCTF:[HCTF 2018]Hide and seek 参考:https://www.jianshu.com/p/d20168da7284 先随便输入账号密码登录 提示我们上传zip文件 上传 ...

  4. BZOJ1941:[SDOI2010]Hide and Seek(K-D Tree)

    Description 小猪iPig在PKU刚上完了无聊的猪性代数课,天资聪慧的iPig被这门对他来说无比简单的课弄得非常寂寞,为了消除寂寞感,他决定和他的好朋友giPi(鸡皮)玩一个更加寂寞的游戏- ...

  5. bzoj1941 [Sdoi2010]Hide and Seek 线段树

    这个题其实应该算4个二维偏序,因为枚举每个点可以根据公式分成4个象限,4种计算方式,所以就考虑怎么求x和y的大小关系集合 首先,按x排序再枚举,可以保证后面的x大于前面的x,就相当于分成了两部分,剩下 ...

  6. BZOJ 1941: [Sdoi2010]Hide and Seek KDtree + 估价函数

    Description 小猪iPig在PKU刚上完了无聊的猪性代数课,天资聪慧的iPig被这门对他来说无比简单的课弄得非常寂寞,为了消除寂寞感,他决定和他的好朋友giPi(鸡皮)玩一个更加寂寞的游戏- ...

  7. hide and seek openai

    https://github.com/miyosuda/evolution_and_ai/tree/master/multi_agent_emergence My conda env: hide-an ...

  8. B3402 [Usaco2009 Open]Hide and Seek 捉迷藏 最短路

    直接最短路板子,dij堆优化. 题干: 题目描述贝茜在和约翰玩一个"捉迷藏"的游戏.她正要找出所有适合她躲藏的安全牛棚.一共有N(2≤N≤20000)个牛棚,被编为1到N号.她知道 ...

  9. 网厨管理java_点菜网---Java开源生鲜电商平台-技术选型(源码可下载)

    centos 安装php7.0.2 PHP7.0正式版已经在2015年11月份左右发布,目前是PHP7.0.2版本,本人最早是从2015年8月php7的第一个测试版跟起,现在正式版发布. linux版 ...

最新文章

  1. oracle删除数据文件
  2. 只要十步,你就可以应用表达式树来优化动态调用
  3. Android -- 自定义权限
  4. Xcode7,ios9 issue ,warning合集
  5. 软考系统架构师笔记-综合知识重点(一)
  6. python接口自动化(三十一)--html测试报告通过邮件发出去——下(详解)
  7. ExtJS学习之路第三步:理解引擎之下,ExtJS4中的类
  8. python中IO多路复用、协程
  9. AI实战:基于AdvancedEAST的自然场景图像文本检测算法
  10. 手机模拟器自带root_VMOS Pro Android 手机上的模拟器 (手机版虚拟机)
  11. 服务器sni协议,关于 https 的 SNI(Sever Name Indication) 问题记录
  12. 浅谈聚合支付系统的安全性
  13. LoRa:SX1278
  14. 地球币earthcoin表情包征图大赛正式筹备准备中
  15. 订货宝 html源码,订货宝新功能,代客下单等一大波移动管理端功能
  16. 文章阅读总结:GPT
  17. mysql inet aton ipv6_mysql 使用inet_aton和inet_ntoa处理ip地址数据
  18. fusion 360自定义螺纹配置文件下载以及安装方法
  19. 0001-Flink安装---Flink安装(Standlone模式)
  20. 第四章-linux内核裁剪与移植

热门文章

  1. ELK实时分析之php的laravel项目日志
  2. MongoDB的安装及基本命令和pymongo的使用
  3. SaltStack(五) SaltStack与ZeroMQ
  4. 乔春洋:话说文化模式
  5. Latex(一)公式自动编号与自动引用
  6. Bootstrap3.1开发的响应式个人简历模板
  7. 网页中PNG透明背景图片的完美应用
  8. vue中props的双向绑定
  9. 事半功倍的AI智能“同事” 天猫精灵新品全测评
  10. 《与编码人员一起工作》作者访谈