L3-006. 迎风一刀斩
迎着一面矩形的大旗一刀斩下,如果你的刀够快的话,这笔直一刀可以切出两块多边形的残片。反过来说,如果有人拿着两块残片来吹牛,说这是自己迎风一刀斩落的,你能检查一下这是不是真的吗?
注意摆在你面前的两个多边形可不一定是端端正正摆好的,它们可能被平移、被旋转(逆时针90度、180度、或270度),或者被(镜像)翻面。
这里假设原始大旗的四边都与坐标轴是平行的。
输入格式:
输入第一行给出一个正整数N(<=20),随后给出N对多边形。每个多边形按下列格式给出:
k x1 y1 ... xk yk
其中k(2 < k <= 10)是多边形顶点个数;(xi, yi)(0 <= xi, yi <= 108)是顶点坐标,按照顺时针或逆时针的顺序给出。
注意:题目保证没有多余顶点。即每个多边形的顶点都是不重复的,任意3个相邻顶点不共线。
输出格式:
对每一对多边形,输出"YES"或者"NO"。
输入样例:
8
3 0 0 1 0 1 1
3 0 0 1 1 0 1
3 0 0 1 0 1 1
3 0 0 1 1 0 2
4 0 4 1 4 1 0 0 0
4 4 0 4 1 0 1 0 0
3 0 0 1 1 0 1
4 2 3 1 4 1 7 2 7
5 10 10 10 12 12 12 14 11 14 10
3 28 35 29 35 29 37
3 7 9 8 11 8 9
5 87 26 92 26 92 23 90 22 87 22
5 0 0 2 0 1 1 1 2 0 2
4 0 0 1 1 2 1 2 0
4 0 0 0 1 1 1 2 0
4 0 0 0 1 1 1 2 0
输出样例:
YES
NO
YES
YES
YES
YES
NO
YES 一共四种情况可以组合成矩形,一种是两个全等直角三角形,一种是两个四边形如果是梯形则斜边相同,如果是矩形则有一条边相同即可,在一种是一个直角梯形加一个直角三角形,斜边要相同,最后是一个五边形加一个直角三角形。
代码:
#include <iostream>
#include <cstdlib>
#include <cmath>
using namespace std;
int xx1[],yy1[],xx2[],yy2[];
int n,k1,k2;
int len_(int a,int b,int c,int d)
{
if(a == c)return abs(b - d);
return abs(a - c);
}
int check_p(int x,int y)
{
if(x > || y < )return ;
int a = -,b = -,c1,d1,c2,d2;
for(int i = ;i < y;i ++)
{
if(xx2[i] != xx2[(i + ) % y] && yy2[i] != yy2[(i + ) % y])
{
if(b == -)b = i,c2 = abs(xx2[i] - xx2[(i + ) % y]),d2 = abs(yy2[i] - yy2[(i + ) % y]);
else return ;
}
else if(xx2[i] == xx2[(i + ) % y] && yy2[i] == yy2[(i + ) % y])return ;
}
for(int i = ;i < x;i ++)
{
if(xx1[i] != xx1[(i + ) % x] && yy1[i] != yy1[(i + ) % x])
{
if(a == -)a = i,c1 = abs(xx1[i] - xx1[(i + ) % x]),d1 = abs(yy1[i] - yy1[(i + ) % x]);
else return ;
}
else if(xx1[i] == xx1[(i + ) % x] && yy1[i] == yy1[(i + ) % x])return ;
}
if(a == - && b != - || a != - && b == -)return ;
if(x == && y == )
{
if(a == - && b == -)
{
int e1 = len_(xx1[],yy1[],xx1[],yy1[]);
int e2 = len_(xx1[],yy1[],xx1[],yy1[]);
int e3 = len_(xx2[],yy2[],xx2[],yy2[]);
int e4 = len_(xx2[],yy2[],xx2[],yy2[]);
if(e1 == e3 || e2 == e4 || e1 == e4 || e2 == e3)return ;///有一对边相等就可以接合
return ;
}
int e1 = len_(xx1[a],yy1[a],xx1[(a - + x) % x],yy1[(a - + x) % x]);
int e2 = len_(xx1[(a + ) % x],yy1[(a + ) % x],xx1[(a + ) % x],yy1[(a + ) % x]);
int e3 = len_(xx2[b],yy2[b],xx2[(b - + y) % y],yy2[(b - + y) % y]);
int e4 = len_(xx2[(b + ) % y],yy2[(b + ) % y],xx2[(b + ) % y],yy2[(b + ) % y]);
int e5 = len_(xx1[(a + ) % x],yy1[(a + ) % x],xx1[(a + ) % x],yy1[(a + ) % x]);
int e6 = len_(xx2[(b + ) % y],yy2[(b + ) % y],xx2[(b + ) % y],yy2[(b + ) % y]);
if(e5 != e6)return ;
if(!(c1 == e5 && d1 == abs(e2 - e1) || d1 == e5 && c1 == abs(e2 - e1)))return ;
if(!(c2 == e6 && d2 == abs(e3 - e4) || d2 == e6 && c2 == abs(e3 - e4)))return ;
if(abs(e2 - e1) == abs(e3 - e4))return ;
return ;
}
else if(x == && y == )
{
if(a == - && b == -)return ;
int e1 = len_(xx1[a],yy1[a],xx1[(a - + x) % x],yy1[(a - + x) % x]);
int e2 = len_(xx1[(a + ) % x],yy1[(a + ) % x],xx1[(a + ) % x],yy1[(a + ) % x]);
int e3 = len_(xx2[b],yy2[b],xx2[(b - + y) % y],yy2[(b - + y) % y]);
int e4 = len_(xx2[(b + ) % y],yy2[(b + ) % y],xx2[(b + ) % y],yy2[(b + ) % y]);
if(e1 == e3 && e2 == e4 || e1 == e4 && e2 == e3)return ;///
return ;
}
else if(x == && y == )
{
if(a == - && b == -)return ;
int e1,e2,e3,e4,e5;
e1 = len_(xx2[b],yy2[b],xx2[(b - + y) % y],yy2[(b - + y) % y]);
e2 = len_(xx2[(b + ) % y],yy2[(b + ) % y],xx2[(b + ) % y],yy2[(b + ) % y]);
e3 = len_(xx1[a],yy1[a],xx1[(a - + x) % x],yy1[(a - + x) % x]);
e4 = len_(xx1[(a + ) % x],yy1[(a + ) % x],xx1[(a + ) % x],yy1[(a + ) % x]);
e5 = len_(xx1[(a + ) % x],yy1[(a + ) % x],xx1[(a + ) % x],yy1[(a + ) % x]);
e3 = abs(e3 - e4);
if(!(c1 == e5 && d1 == e3 || c1 == e3 && d1 == e5))return ;
if(e5 == e1 && e2 == e3 || e5 == e2 && e1 == e3)return ;
return ;
}
else if(x == && y == )
{
if(a == - && b == -)return ;
int e1 = len_(xx1[a],yy1[a],xx1[(a - + x) % x],yy1[(a - + x) % x]);
int e2 = len_(xx1[(a + ) % x],yy1[(a + ) % x],xx1[(a + ) % x],yy1[(a + ) % x]);
int e3 = len_(xx2[b],yy2[b],xx2[(b - + y) % y],yy2[(b - + y) % y]);
int e4 = len_(xx2[(b + ) % y],yy2[(b + ) % y],xx2[(b + ) % y],yy2[(b + ) % y]);
int e5 = len_(xx1[(a - + x) % x],yy1[(a - + x) % x],xx1[(a - + x) % x],yy1[(a - + x) % x]);
int e6 = len_(xx1[(a + ) % x],yy1[(a + ) % x],xx1[(a + ) % x],yy1[(a + ) % x]);
e1 = abs(e1 - e6);
e2 = abs(e2 - e5);
if(!(c1 == e1 && d1 == e2 || c1 == e2 && d1 == e1))return ;
if(e1 == e3 && e2 == e4 || e1 == e4 && e2 == e3)return ;
return ;
}
return ;
} int main()
{
cin>>n;
for(int i = ;i < n;i ++)
{
cin>>k1;
for(int j = ;j < k1;j ++)
{
cin>>xx1[j]>>yy1[j];
}
cin>>k2;
for(int j = ;j < k2;j ++)
{
cin>>xx2[j]>>yy2[j];
}
if(k1 < k2)swap(k1,k2),swap(xx1,xx2),swap(yy1,yy2);
if(!check_p(k1,k2))cout<<"NO";
else cout<<"YES";
cout<<endl;
}
}
L3-006. 迎风一刀斩的更多相关文章
- MOD13A1: MODIS/Terra Vegetation Indices 16-Day L3 Global 500 m SIN Grid V006
https://lpdaac.usgs.gov/node/838 Description The MOD13A1 Version 6 product provides a Vegetation Ind ...
- 配置 L3 agent - 每天5分钟玩转 OpenStack(99)
上一节我们介绍了路由服务(Routing)的基本功能,今天教大家如何配置. Neutron 的路由服务是由 l3 agent 提供的. 除此之外,l3 agent 通过 iptables 提供 fir ...
- Neutron 理解 (6): Neutron 是怎么实现虚拟三层网络的 [How Neutron implements virtual L3 network]
学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...
- 理解 OpenStack 高可用(HA)(2):Neutron L3 Agent HA 之 虚拟路由冗余协议(VRRP)
本系列会分析OpenStack 的高可用性(HA)概念和解决方案: (1)OpenStack 高可用方案概述 (2)Neutron L3 Agent HA - VRRP (虚拟路由冗余协议) (3)N ...
- 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数006, image,影像处理(像素图)
<zw版·Halcon-delphi系列原创教程> Halcon分类函数006, image,影像处理(像素图) 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“* ...
- android 入门 006(sqlite增删改查)
android 入门 006(sqlite增删改查) package cn.rfvip.feb_14_2_sqlite; import android.content.Context; import ...
- php大力力 [006节]初步接触认识phpMyAdmin
phpMyAdmin 2015-08-22 php大力力006. 初步接触认识phpMyAdmin 以下是phpAdmin网络截图: 这是通过MAMP一键安装的. php中MyAdmin的使用-猿代码 ...
- 006. C#使用WMI操作远程计算机
1. 使用WMI CIM studio 查看\root\CIMV2 所有可使用的表/字段(类/属性) , 点击下载 WMI CIM studio 2. 安装完成后打开VMI CIM studio
- [Freescale]Freescale L3.14.52_1.1.0 yocto build
可参照:http://blog.csdn.net/wince_lover/article/details/51456745 1. Refer to <基于i.mx6处理器的Yocto项目及Lin ...
- [反汇编练习] 160个CrackMe之006
[反汇编练习] 160个CrackMe之006. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...
随机推荐
- 第三周syh
第三周作业 7-1 判断上三角矩阵 (15 分) 上三角矩阵指主对角线以下的元素都为0的矩阵:主对角线为从矩阵的左上角至右下角的连线. 本题要求编写程序,判断一个给定的方阵是否上三角矩阵. 输入格 ...
- C#实现读取指定盘符硬盘序列号的方法
文章主要介绍了C#实现读取指定盘符硬盘序列号的方法,涉及C#针对硬件属性的相关操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了C#实现读取指定盘符硬盘序列号的方法.分享给大家供 ...
- always_populate_raw_post_data
Deprecated: Automatically populating $HTTP_RAW_POST_DATA is deprecated and will be removed in a futu ...
- lr中用C语言比较两个字符串变量
以下脚本,定义两个一样的字符数组,对比后,打印出result的值: Action() { int result; char string1[] = "We can see the strin ...
- post与get方法的区别
1. GET请求:请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接.URL的编码格式采用的是ASCII编码,而不是unicode,即是说所有的非ASCII字符都要编码之 ...
- Dubbo负载均衡:最少活跃数(LeastActive)
官方文档定义 最少活跃调用数,相同活跃数的随机,活跃数指调用前后计数差. 使慢的提供者收到更少请求,因为越慢的提供者的调用前后计数差会越大. 关于活跃数 最少活跃数负载均衡,最关键的点在于活跃数.活跃 ...
- tomcat打开失败原因
我重装系统以后,tomcat无法打开,原因是有的项目的虚拟路径有误 到server.xml下修改虚拟路径
- 网站模板-Layui:Layui
ylbtech-网站模板-Layui:百科 layui,是一款采用自身模块规范编写的前端 UI 框架,遵循原生 HTML/CSS/JS 的书写与组织形式,门槛极低,拿来即用.其外在极简,却又不失饱满的 ...
- 简要介绍一下MD5加密的书写
大家应该多清楚数据的重要性,可以假设一下:一个非常大的企业,因为一个程序员的疏忽大意,没有使用MD5加密,那么可以说这个企业的数据库是非常不安全的,可以轻而易举的的访问你的数据库,并执行任何操作. 下 ...
- k8s架构
master节点 k8s的集群由master和node组成,节点上运行着若干k8s服务. master节点之上运行着的后台服务有kube-apiserver .kube-scheduler.kube- ...