Swordsman

题目链接:HDU - 3902

题意:按顺时针或逆时针给出多边形的n个顶点,问该多边形是否是一个轴对称图形;

思路:对于奇顶点多边形,其对称轴一定经过某一边的中点和其对边的连线;

对于偶顶点多边形,其对称轴要么经过两相对顶点的连线,要么经过两相对边的中点的连线;

但是总体来说,若某一多边形是轴对称图形,那么在该多边形上的任意相对的两点连线被对称轴垂直平分;

所以加入边的中点,枚举任何一个可能是对称轴的两点两线,判断;

#include <bits/stdc++.h>
#define esp 1e-10
using namespace std;
const int maxn=20100;
struct point{double x, y;
}p[maxn<<1], a[maxn];
double cross(point a, point b, point c){return (b.x-a.x)*(c.y-a.y)-(b.y-a.y)*(c.x-a.x);
}
double pcross(point a, point b, point c, point d){return (a.x-b.x)*(c.x-d.x)+(a.y-b.y)*(c.y-d.y);
}
double mid(double a, double b){return (a+b)/2.0;
}
bool check(point a, point b, point c, point d){point e=(point){mid(c.x, d.x), mid(c.y, d.y)};return fabs(pcross(c, d, a, b))<esp && fabs(cross(a, b, e))<esp;
}
int main(){int n;while(~scanf("%d", &n)){for(int i=0; i<n; i++){scanf("%lf%lf", &a[i].x, &a[i].y);}a[n]=a[0];int cnt=0;for(int i=1; i<=n; i++){p[cnt++]=a[i-1];p[cnt++]=(point){mid(a[i-1].x, a[i].x), mid(a[i-1].y, a[i].y)};}int t=cnt/2;int flag=0;for(int i=0; i+t<cnt; i++){int j, k;for(j=i+t-1, k=1; i<j; j--, k++){if(!check(p[i], p[i+t], p[j], p[(i+t+k)%cnt])) break;}if(i==j){flag=1;break;}}if(flag) printf("YES\n");else printf("NO\n");}return 0;
}

Swordsman HDU - 3902(判断轴对称图形)相关推荐

  1. hdu 1086(判断两线段是否相交)

    题意:给出一些线段,问有多少个交点. 解题思路:这里实际就是一个线段相交的模型,下面这个图给出了思路. 如果两线段相交,则两线段必然相互跨立对方.若P1P2跨立Q1Q2 ,则矢量 ( P1 - Q1 ...

  2. Pipe HDU - 2150(判断线段相交+向量叉乘线代详解)

    题目: 经过激烈的争夺,Lele终于把那块地从Yueyue的手里抢了回来.接下来,Lele要开始建造他的灌溉系统. 通过咨询Lele的好友--化学系的TT,Lele决定在田里挖出N条沟渠,每条沟渠输送 ...

  3. hdu 5059 判断数字表示方式以及范围合法(int型之内)

    题意:       给你一个串和两个整数a,b,问你这个串表示的数字是否合法,并且在a,b之间, 和法的要求是无论是正数还是负数都没有前导0,并且注意 -0 是不合法的. 思路:       写了将近 ...

  4. hdu 5585 判断一个数能否被3整除

    小学生的题:我居然不会; 就是如果每一位相加后的结果能被3整除,则该数能被3整除 #include<bits/stdc++.h> using namespace std; int main ...

  5. 判断一个图形是否为对称图形

    /* hdu 3902 Swordsman 题解:有点小暴力,但也很快A了.对于n个点的多边形,再找出每条边的中点,重新逆时针或顺时针排序, 总数变为2*n个点,如果存在对称轴,则必在经过i和i+n( ...

  6. 计算几何及其应用——计算几何基础

    写在前面:当时开计算几何这个专题神奇的从解析几何开始了,然后最近发现<计算几何及应用(金博)>这本书前面那章忽略掉了一些重要的东西比如说点定位.半平面相交之类的东西,恰好还有一些和计算几何 ...

  7. HDU 3342 Legal or Not(拓扑排序判断成环)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3342 题目大意:n个点,m条有向边,让你判断是否有环. 解题思路:裸题,用dfs版的拓扑排序直接套用即 ...

  8. hdu 5285(染色法判断二分图)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5285 解题思路:很明显的是二分图的判定,用染色法即可. 不过这题有一个坑,当n<=1和m=0时要 ...

  9. hdu 1317 XYZZY【Bellheman_ford 判断正环小应用】

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1317 http://acm.hust.edu.cn/vjudge/contest/view.action ...

最新文章

  1. 三角形css_纯 CSS 实现绘制各种三角形(各种角度)
  2. python excel绘图-Python excel 画图
  3. qt4.8添加mysql驱动_Windows下编译Qt4.8 MySQL数据库驱动
  4. Spring Cloud中Hystrix、Ribbon及Feign的熔断关系是什么?
  5. python做自动化如何定位动态元素_python-web自动化-元素定位
  6. linux创建虚拟账号,linux vsftpd 创建虚拟用户 过程记录
  7. halcon 旋转_HALCON高级篇:3D相机标定
  8. java html转换xml文件,使用Java在HTML中转换XML + XSL
  9. 计算机视觉标准数据集整理—PASCAL VOC数据集
  10. 埃夫特机器人离线编程软件_工业机器人离线编程与虚拟仿真软件
  11. 大乱斗ps4好玩吗_飞刀剑影乱作战:飞刀大乱斗ol游戏小程序,点开既玩
  12. python c语言实现_使用C语言为python编写动态模块(3)--在C中实现python中的类
  13. ThinkPad T450 笔记本电脑 Fn + F8 组合键失效后开启无线网络的办法
  14. 《JS修炼之道》—— 读后总结
  15. matlab中switch函数的使用
  16. 将数字月份转换成英语字母的月份的例子
  17. 传说中的移动员工工资表,也不知是真是假
  18. RabbitMq集成SpirngBoot
  19. 滴滴Logi日志服务五大PASS套件开源时间表
  20. matlab图像类论文,基于matlab图形图像处理技术毕设论文.doc

热门文章

  1. 用XPath一分钟上手爬虫,良心之作__一蓑烟雨任平生
  2. canvas的lineCap线段端点模样和 lineJoin线段连接处模样
  3. 用js获取QQ好友信息和QQ群信息
  4. VS中的代码拷贝到word中时,中文注释会出现乱码的解决办法
  5. TPA4045-ASEMI光伏防回流二极管TPA4045
  6. 蓝天变多了,为什么你家里的空气却更差了?
  7. 数字信号处理之Matlab应用基础
  8. 掌财社:2021年个人所得税特别扣除如何计算?
  9. 百度地图AK申请注意+百度地图API生成热力图+调用百度地图API自动获取经纬度和地址
  10. 计算机课程专业术语英文,计算机课程英文翻译