problem


  • 题意:给出n对多边形,判断每一对多边形是否是由一块矩形一刀切下形成的。

solution

  • 一个矩形被切,有4种情况
    切到0个顶点,三角形+五边形,或四边形+四边形
    切到1个顶点,三角形+四边形
    切到2个顶点,三角形+三角形

  • 再考虑特殊情况,切线平行坐标轴
    那么会得到两个矩形,一条边互相相等
    如果不平行(一般情况),那也只有这一条边是不平行的
    所以,给出的坐标,最多只有一条不平行,否则就no。

  • 对于这一条不平行的情况,因为题目的点是按照顺序给出的,
    所以如果相邻两个点的横坐标和纵坐标都不相等,那就是不平行的边
    找到这条斜边,如果斜边相等,那么两个图形就可以拼合

  • 对于最后一个数据点
    在四边形+四边形中,则会产生两个图形唯一的斜边等价、却不能拼成矩形的情况,此时需要特殊判定一下这两个直角梯形的直角腰是否相等。

//超级注释版
#include<bits/stdc++.h>
using namespace std;//1.分别存储两个图形的斜边(2个点),顶点数,
vector<int> v[2], n;
//2.特判情况:四边形直角腰,矩形个数
vector<int>len; int flag;//1.找到斜边
void deal(int id, vector<int>& x, vector<int>& y){int sz = x.size(); set<int>st;for(int i = 0; i < sz; i++){//相邻点横纵坐标都不等:这两点构成斜边。if(x[i]!=x[(i+1)%sz] && y[i]!=y[(i+1)%sz]){st.insert(i);  st.insert((i+1)%sz);//如果是四边形:存储直角腰的长度 if(sz==4)len.push_back(abs(x[(i+2)%4]-x[(i+3)%4])+abs(y[(i+2)%4]-y[(i+3)%4]));}}if(st.size()==0){//没有斜边,所以是矩形//存下两条直角边v[id].push_back(abs(x[2]-x[0]));v[id].push_back(abs(y[2]-y[0]));flag++; //矩形个数+1}else{//存储斜边(2个端点)for(int i : st){v[id].push_back(x[i]);v[id].push_back(y[i]);}}
}
//2.情况判断
void solve(){//最多也就三边形+五边形,超过8个点就错。if(n[0]<=5 && n[1]<=5 && n[0]+n[1]<=8){if(flag==2){//两个矩形//只要矩形A(x,y)两条直接边有一条能和矩形B合上就行int x=v[0][0],y=v[0][1],c=v[1][0],d=v[1][1];if(x==c||x==d||y==c||y==d){cout<<"YES\n";return;}}if(flag==0){//没有矩形//如果没有斜边,不成立if(v[0].size()==4 && v[1].size()==4){//特判直角腰if(n[0]==4&&n[1]==4&&len[0]!=len[1]){cout<<"NO\n";return;}//存下两条直角边(斜边分别做垂直的直角三角形)int x=abs(v[0][2]-v[0][0]),y=abs(v[0][3]-v[0][1]); if(x>y) swap(x,y);int c=abs(v[1][2]-v[1][0]),d=abs(v[1][3]-v[1][1]); if(c>d) swap(c,d);//当且仅当直角边都相等,斜边相等if(x==c&&y==d){cout<<"YES\n";return;}}}//一个矩形的情况不存在}cout<<"NO\n";
}int main(){int T;  cin>>T;while(T--){//1. 变量全部初始化flag = 0; n.clear();  len.clear();v[0].clear();  v[1].clear();//2. 输入两个多边形for(int i = 0; i < 2; i++){int k;  cin>>k;  n.push_back(k);vector<int>x(k), y(k);for(int j = 0; j < k; j++)cin>>x[j]>>y[j];//2.1 找到斜边deal(i,x,y);}//3. 结论判断solve();}return 0;
}

【CCCC】L3-006 迎风一刀斩 (30分),几何关系,找规律 (拼合多边形==斜边等价)相关推荐

  1. 【CCCC】L3-023 计算图 (30分),dfs搜索+偏导数计算

    problem L3-023 计算图 (30分) "计算图"(computational graph)是现代深度学习系统的基础执行引擎,提供了一种表示任意数学表达式的方法,例如用有 ...

  2. 【CCCC】L3-009 长城 (30分),计算几何+凸包,极角排序

    problem L3-009 长城 (30分) 正如我们所知,中国古代长城的建造是为了抵御外敌入侵.在长城上,建造了许多烽火台.每个烽火台都监视着一个特定的地区范围.一旦某个地区有外敌入侵,值守在对应 ...

  3. 【CCCC】L3-021 神坛 (30分)计算几何+求三角形面积(极角排序)

    problem L3-021 神坛 (30分) 在古老的迈瑞城,巍然屹立着 n 块神石.长老们商议,选取 3 块神石围成一个神坛.因为神坛的能量强度与它的面积成反比,因此神坛的面积越小越好.特殊地,如 ...

  4. 【CCCC】L3-011 直捣黄龙 (30分),Dijkstra维护点权,节点数,路径条数等+路径打印

    problem L3-011 直捣黄龙 (30分) 本题是一部战争大片 -- 你需要从己方大本营出发,一路攻城略地杀到敌方大本营.首先时间就是生命,所以你必须选择合适的路径,以最快的速度占领敌方大本营 ...

  5. L3-006 迎风一刀斩 (30 分)-PAT 团体程序设计天梯赛 GPLT

    迎着一面矩形的大旗一刀斩下,如果你的刀够快的话,这笔直一刀可以切出两块多边形的残片.反过来说,如果有人拿着两块残片来吹牛,说这是自己迎风一刀斩落的,你能检查一下这是不是真的吗? 注意摆在你面前的两个多 ...

  6. 【CCCC】L3-026 传送门 (30分),splay(待复盘)

    problem 7-14 传送门 平面上有 2n 个点,它们的坐标分别是 (1,0),(2,0),⋯(n,0) 和 (1,10 ​9 ​​ ),(2,10 ​9 ​​ ),⋯,(n,10 ​9 ​​ ...

  7. L3-009 长城 (30分):几何数学

    正如我们所知,中国古代长城的建造是为了抵御外敌入侵.在长城上,建造了许多烽火台.每个烽火台都监视着一个特定的地区范围.一旦某个地区有外敌入侵,值守在对应烽火台上的士兵就会将敌情通报给周围的烽火台,并迅 ...

  8. 【CCCC】L3-025 那就别担心了 (30分),dfs搜索起点到终点的路径条数。

    problem L3-025 那就别担心了 (30分) 下图转自"英式没品笑话百科"的新浪微博 -- 所以无论有没有遇到难题,其实都不用担心. ziqia.jpg 博主将这种逻辑推 ...

  9. 【CCCC】L3-016 二叉搜索树的结构 (30分),,手动建堆(二叉搜索树节点询问),map写法

    problem L3-016 二叉搜索树的结构 (30分) 二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值:若它的右子树不空,则右 ...

最新文章

  1. 洛谷P1092 虫食算
  2. 程序员,假如生活欺骗了你
  3. JQuery插件:ScrollTo平滑滚动到页面指定位置
  4. ExtJS4.x动态加载js文件
  5. vue 音乐盒app_VBox 一款基于vue开发的音乐盒 序章
  6. Zabbix监控Linux主机设置
  7. C#字符串处理(String与StringBuilder)
  8. 1.搭建Spring环境
  9. xp 设备管理器 android,XP设备管理器怎么打开?
  10. RSA公私钥加解密方式-工具类
  11. 关于计算机软件系统分类能够匹配的有,以下关于计算机软件系统分类能够匹配的有:...
  12. 中间语言MicroSoft Intermediate Language(MSIL)
  13. echarts设置网格线颜色
  14. F#基础教程 ref类型
  15. 猜你喜欢代码替换_如何在 GitHub 上找到你要的代码?
  16. freetype 2.11.0必须使用VS2012编译
  17. python fetchall函数_关于python中的查询数据库内容中用到的fetchone()函数和fetchall()函数(转)还有fetchmany()...
  18. 如果自己配电脑电源额定瓦数过高会有什么坏处吗?
  19. 普通最小二乘法讲解OLS线性回归
  20. 四种“不使用第三方变量就可以交换两个变量值”的方法

热门文章

  1. 作为电磁波的 Wi-Fi 信号
  2. 骗术 —— 魔高一尺道高一丈
  3. 3C(Computer、Communication、Consumer Electronic)
  4. Python 数据结构与算法——tree(树)
  5. 从伪随机数的产生到高大上的蒙特卡洛算法(C语言实现)
  6. 螺杆泵matlab,基于Matlab与VC++混合编程的螺杆泵转子型线设计
  7. java excel 合并两个单元格内容 无法换行_12个简单高效的EXCEL小技巧,让你秒变职场达人!...
  8. c 调用python clion_CLion 2018.1.3 功能超级强大的跨平台 C 开发工具
  9. python学习-要学 Python 需要怎样的基础?
  10. 音频录制和Speech语音识别(ios10)