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. JS --正则表达式验证、实战之邮箱模式
  2. 微软系统遭*** 谴责人为失误
  3. Oneproxy 读写分离
  4. java按行读取txt文件内容_对txt文件中的内容进行排序
  5. 了解【Docker】从这里开始
  6. mysql 分钟_mysql分钟到小时和分钟
  7. MapReduce案例-wordcount-Reduce阶段代码
  8. 天津政府应急系统之GIS一张图(arcgis api for flex)解说(二)鹰眼模块
  9. 技术系统进化法则包括_技术系统进化论,模式五、技术集成以增加系统功能
  10. python程序怎么修改_详解Python文件修改的两种方式
  11. 有幸和一位企业家聊天,他白手起家
  12. 虚拟机管理解决方案逐个看:微软篇
  13. 报表工具对比选型系列——打印与导出
  14. 大数据DBA:大数据数据库管理做什么
  15. MYSQL查询优化一
  16. 【从零开始学习 UVM】6.4、UVM 激励产生 —— uvm_do 宏详解
  17. YOLOV3论文阅读(学习笔记)
  18. Java绘制海螺_彩铅画海螺步骤入门教程
  19. el-radio-button 设置默认选中问题
  20. 9006 - ProxySQL Error: connection is locked to hostgroup 2 but trying to reach hostgroup 1

热门文章

  1. 维纳过程(Wiener Process)与高斯过程(Gaussian Process)
  2. [面试] C/C++ 语法(六)—— RTTI(运行时类型信息)
  3. devops handbook 读书笔记_DevOps教程:DevOps 面试题
  4. 2018年python工作好找吗-2018年最新数据:python、大数据、人工智能从业者薪资表...
  5. python官网下载好慢-python 官网慢
  6. python就业方向-连小学生都在学的Python,究竟就业方向有哪些?
  7. python为什么叫爬虫-总算领会python为什么叫爬虫
  8. 语音云识别工具_语音识别工具_web语音识别应用程序的工具 - 云+社区 - 腾讯云...
  9. 语音识别介绍(上篇)
  10. 语音识别看似神通广大 但它真的听得懂方言么