计算几何专项:UVa 10556
来源:互联网 发布:人工智能专业就业方向 编辑:程序博客网 时间:2024/05/22 15:39
刚开始用double类型做,就是先把第一个多边形上一个点位移到另一个多边形的对应点处,然后再旋转和位移。然后果断因为精度问题WA了。。。然后改成整形,推一遍公式就AC了。恩,以后不管什么类型的题,能化整形就尽量化成整形,以避免不必要的精度问题。
#include <iostream>#include <cstdio>#include <cmath>using namespace std;struct point{ int x,y; point(int x=0,int y=0):x(x),y(y){}};point operator-(point a,point b){return point(a.x-b.x,a.y-b.y);}point operator+(point a,point b){return point(a.x+b.x,a.y+b.y);}int length(point a){return a.x*a.x+a.y*a.y;}int cross(point a,point b){return a.x*b.y-a.y*b.x;}int n;point p1[20],p2[20],p3[20];int main(){ freopen("in.txt","r",stdin); while(cin>>n) { if(!n) break; for(int i=0;i<n;i++) cin>>p1[i].x>>p1[i].y; for(int i=0;i<n;i++) cin>>p2[i].x>>p2[i].y; for(int i=0;i<n;i++) p3[i]=p1[0]+(p2[i]-p2[0]); int flag=1; point a0=p3[1]-p3[0],b0=p1[1]-p1[0]; for(int i=0;i<n;i++) { point a1=p3[i]-p3[0],b1=p1[i]-p1[0]; if(length(a1)*length(b0)==length(b1)*length(a0)&& cross(a0,b0)*cross(a0,b0)*length(a1)*length(b1)==cross(a1,b1)*cross(a1,b1)*length(a0)*length(b0)) continue; flag=0; break; } if(flag) cout<<"similar"<<endl; else cout<<"dissimilar"<<endl; } return 0;}
- 计算几何专项:UVa 10556
- 计算几何专项:UVa 11437
- 计算几何专项:UVa 11646
- 计算几何专项:UVa 11817
- 计算几何专项:UVa 11524
- 计算几何专项:UVa 10566
- 计算几何专项:UVa 11186
- 计算几何专项:UVa 10522
- 计算几何专项:UVa 10674
- 计算几何专项:UVa 10439
- 计算几何专项:UVa 12300
- 计算几何专项:UVa 12301
- 计算几何专项:UVa 10585
- 计算几何专项:UVa 10969
- 计算几何专项:UVa 10245
- 计算几何专项:UVa 11072
- 计算几何专项:UVa 811
- 计算几何专项:UVa 588
- js substr()、substring()、与slice() 三者的区别
- 简单的十进制数字与二,八,十六进制互转
- 1083 1到10的英文单词
- Word中添加参考文献
- 黑马程序员--属性和方法
- 计算几何专项:UVa 10556
- ubuntu创建桌面启动器
- 安装vmtools之后任然不能在虚拟机和主机之间复制粘贴的问题
- 算法导论习题解析----2.1-4
- 上传图片input-file表单元素值为C://fakepath,不能得到本地真实路径解决方法
- Scintilla在WTL中的简易使用
- Service完全解析
- EmguCV在64位机上的几个问题处理办法
- 黑马程序员_张孝祥老师的银行调度面试题