博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces 994 C - Two Squares
阅读量:5791 次
发布时间:2019-06-18

本文共 2470 字,大约阅读时间需要 8 分钟。

思路:

点积叉积应用

代码:

#include
using namespace std;#define fi first#define se second#define pi acos(-1.0)#define LL long long#define mp make_pair#define pb push_back#define ls rt<<1, l, m#define rs rt<<1|1, m+1, r#define ULL unsigned LL#define pll pair
#define pii pair
#define piii pair
#define mem(a, b) memset(a, b, sizeof(a))#define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);#define fopen freopen("in.txt", "r", stdin);freopen("out.txt", "w", stout);//headstruct P { double x, y; P(){} P(double x, double y):x(x), y(y) {} P operator - (P p) { return P(x-p.x, y-p.y); } double cross(P p) { return x*p.y - y*p.x; } double dot(P p) { return x*p.x + y*p.y; }};typedef P Vector;bool on_seg(P p, Vector a, Vector b) { if((a-p).cross(b-p) == 0 && (a-p).dot(b-p) <= 0) return true; else return false;}double area2(Vector a, Vector b, Vector c) { return (b-a).cross(c-a);}bool intersect(Vector a, Vector b, Vector c, Vector d) { if(area2(a, c, d) == 0 && area2(b, c, d) == 0 && !on_seg(a, c, d) && !on_seg(b, c, d) || area2(a, c, d) * area2(b, c, d) > 0 || area2(c, a, b) * area2(d, a, b) > 0 ) return false; else return true;}pii a[4], b[4];int main() { for (int i = 0; i < 4; i++) scanf("%d %d", &a[i].fi, &a[i].se); for (int i = 0; i < 4; i++) scanf("%d %d", &b[i].fi, &b[i].se); for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { Vector aa(a[i].fi, a[i].se); Vector bb(a[(i+1)%4].fi, a[(i+1)%4].se); Vector c(b[j].fi, b[j].se); Vector d(b[(j+1)%4].fi, b[(j+1)%4].se); if(intersect(aa, bb, c, d)) return 0*puts("YES"); } } for (int i = 0; i < 4; i++) { int x = 0, y = 0, xx = 0, yy = 0; for (int j = 0; j < 4; j++) { Vector A(a[i].fi, a[i].se), B(b[j].fi, b[j].se), C(b[(j+1)%4].fi, b[(j+1)%4].se); if(area2(A, B, C) > 0) x++; else if(area2(A, B, C) < 0)y++; else x++, y++; Vector AA(b[i].fi, b[i].se), BB(a[j].fi, a[j].se), CC(a[(j+1)%4].fi, a[(j+1)%4].se); if(area2(AA, BB, CC) > 0) xx++; else if(area2(AA, BB, CC) < 0) yy++; else xx++, yy++; } if(x == 4 || y == 4 || xx == 4 || yy == 4) return 0*puts("YES"); } puts("NO"); return 0;}

 

转载于:https://www.cnblogs.com/widsom/p/9277678.html

你可能感兴趣的文章
胖哥学SpringMVC:请求方式转换过滤器配置
查看>>
Kotlin 更加优雅的 Builder - 理解 with
查看>>
前端日拱一卒D6——字符编码与浏览器解析
查看>>
深入理解浏览器的缓存机制
查看>>
微软向Linux社区开放60000多项专利:对开源微软是认真的
查看>>
Hoshin Kanri在丰田的应用
查看>>
又拍云沈志华:如何打造一款安全的App
查看>>
克服大数据集群的挑战
查看>>
PostgreSQL并发控制(MVCC, 事务,事务隔离级别)
查看>>
DM***的第二阶段OSPF
查看>>
20180702搭建青岛RAC记录
查看>>
Spring Security OAuth 实现OAuth 2.0 授权
查看>>
linux文件及简单命令学习
查看>>
dubbo源码分析-架构
查看>>
新 Terraform 提供商: Oracle OCI, Brightbox, RightScale
查看>>
6套毕业设计PPT模板拯救你的毕业答辩
查看>>
IT兄弟连 JavaWeb教程 JSP与Servlet的联系
查看>>
Windows phone 8 学习笔记
查看>>
linux并发连接数:Linux下高并发socket最大连接数所受的各种限制
查看>>
详解区块链中EOS的作用。
查看>>