HDU 4082 水 几何

来源:互联网 发布:数据挖掘会议 编辑:程序博客网 时间:2024/04/29 21:05

11年北京现场赛 水题

判断相似三角形个数

注意重点 共线  

然后无脑爆搜。。。


#include "stdio.h"#include "string.h"#include "math.h"#include "stdlib.h"#include "iostream"#include "algorithm"using namespace std;struct comp1{int x, y;} point[21];struct comp2{double x[10];} tri[1010];double dis(int a,int b){return sqrt(  (point[a].x-point[b].x)*(point[a].x-point[b].x)+(point[a].y-point[b].y)*(point[a].y-point[b].y) );}int collinear(int a,int b,int c){double x1,y1,x2,y2;x1=point[b].x-point[a].x;y1=point[b].y-point[a].y;x2=point[c].x-point[a].x;y2=point[c].y-point[a].y;if (fabs(x1*y2-x2*y1)<1e-10) return 1;else return 0;}int judge(int a,int b){double x,y,z;x=tri[a].x[0]/tri[b].x[0];y=tri[a].x[1]/tri[b].x[1];z=tri[a].x[2]/tri[b].x[2];if ( fabs(x-y)>1e-10) return 0;if ( fabs(x-z)>1e-10) return 0;if ( fabs(y-z)>1e-10) return 0;return 1;}int main(){int n,sum,x,y,flag,i,j,k,max;while (scanf("%d",&n)!=EOF){if (n==0) break;sum=0;for (i=1;i<=n;i++){scanf("%d%d",&x,&y);flag=1;for (j=1;j<=sum;j++)if (point[j].x==x && point[j].y==y) { flag=0; break;}if (flag==1){sum++;point[sum].x=x;point[sum].y=y;}}n=sum;sum=0;for (i=1;i<=n;i++)for (j=i+1;j<=n;j++)for (k=j+1;k<=n;k++){if (collinear(i,j,k)==1) continue;sum++;tri[sum].x[0]=dis(i,j);tri[sum].x[1]=dis(i,k);tri[sum].x[2]=dis(j,k);sort(tri[sum].x,tri[sum].x+3);}max=0;n=sum;for (i=1;i<=n;i++){sum=0;for (j=1;j<=n;j++)if (judge(i,j)==1) sum++;if (sum>max) max=sum;}printf("%d\n",max);}return 0;}


原创粉丝点击