fzu 2035 Axial symmetry(判断多边行对称)
2014-05-05 22:18
344 查看
题目地址:http://acm.fzu.edu.cn/problem.php?pid=2035
其实这题也是一样的:http://acm.hdu.edu.cn/showproblem.php?pid=3902
题目意思也很好懂,就是处理如何判断多边行是否对称。
先找出所有点的中点,然后一共有2×N个点,依次检查是否关于XY的连线对称
如果存在对称轴,必定是点i和点i+n连成的直线,然后分别验证两边对称的点到点i和点i+n的距离是否相等
参考这里:http://www.cnblogs.com/kuangbin/archive/2011/08/03/2126194.html
代码如此:
作为模板mark下,写的程序太少了。。。。。。
其实这题也是一样的:http://acm.hdu.edu.cn/showproblem.php?pid=3902
题目意思也很好懂,就是处理如何判断多边行是否对称。
先找出所有点的中点,然后一共有2×N个点,依次检查是否关于XY的连线对称
如果存在对称轴,必定是点i和点i+n连成的直线,然后分别验证两边对称的点到点i和点i+n的距离是否相等
参考这里:http://www.cnblogs.com/kuangbin/archive/2011/08/03/2126194.html
代码如此:
#include <stdio.h> #include <string.h> #include <math.h> #define Max 20000 #define eps 1e-5 struct node { double x,y; }node[2*Max+10]; int n,m; bool flag; double dis(int i,int j) { double x=node[i].x-node[j].x; double y=node[i].y-node[j].y; return sqrt(x*x+y*y); } bool check(int i,int j,int x,int y) { if(fabs(dis(i,x)-dis(j,x))>eps)return false; if(fabs(dis(i,y)-dis(j,y))>eps)return false; return true; } void reco(int x,int y) { int i,j; i=j=x; while(1) { i++; j--; if(j==0) j=m; if(i==y) { flag=true; return ; } if(check(i,j,x,y)==false)return ; } } int main() { int i,j,cou; scanf("%d",&cou); for(i=0;i<cou;i++) { scanf("%d",&n); m=2*n; for(j=1;j<=m;j+=2) { scanf("%lf%lf",&node[j].x,&node[j].y); } node[m+1]=node[1]; for(j=2;j<=m;j+=2) { node[j].x=(node[j-1].x+node[j+1].x)/2; node[j].y=(node[j-1].y+node[j+1].y)/2; } flag=false; for(j=1;j<=n;j++) { reco(j,j+n); if(flag)break; } if(flag)printf("Case %d: YES\n",i+1); else printf("Case %d: NO\n",i+1); } return 0; }
作为模板mark下,写的程序太少了。。。。。。
相关文章推荐
- OpenCV2邻域和模板操作
- 在java中使用正则表达式注意的地方
- 异或(XOR)运算加密/解密算法
- 字典树
- 图像处理与计算机视觉 基础、经典以及最近发展
- 当达到文本域的最大字符数时跳至下一个域
- android全局变量
- 公有权限,私有权限,保护权限
- 推荐13款优秀的Twitter Bootstrap JavaScript插件
- TortoiseGit 的使用
- TreeSet实现集合中对象排序
- Android Studio 使用技巧一(删除Module)
- 【MOSS】Sharepoint大附件上传
- [转]hive中自定义函数(UDAF)实现多行字符串拼接为一行
- jsoup: Java HTML 解析器
- 安全威胁无孔不入:基于Linux系统的病毒(转)
- 特殊权限(t)之粘着位
- 文件系统,一些常用命令
- mina2
- 网络语音技术