HDU 4082 Hou Yi's secret
来源:互联网 发布:淘宝抠图兼职 编辑:程序博客网 时间:2024/06/07 14:11
题意:有n个点,连接三个点可以组成一个三角形,求组成的三角形中相似三角形的最大数目
解题思路:模拟.用一个结构体Node存储点,这里要注意可能会有重点(巨坑),用used数组标记,将重复的点去掉,记录不是重复的点,还有要注意这里点的范围是-100~100,所以要把点的坐标都加上100,将负的都变成正的,正的也要加100,防止和负数加100之后的点重复,如果不加的话就会RE,用另一个结构体P存储三角形的三条边,还要判断共线的情况,存储边的时候可以用一个temp数组,然后将三条边排个序,这样在判断相似的时候就不用列出6种情况了,只需要判断对应的边成比例就好了,尽量不要用除法判断,求边长时也尽量不要用浮点数,因为会有精度问题。因为数比较小所以直接暴力一下不会超时,但是要注意开的结构体的大小
连接不共线的三个点肯定能组成一个三角形,就不用在求出边的时候判断能不能组成三角形了
代码:
#include <iostream>#include <algorithm>#include <cstring>#include <string>#include <cmath>#include <cstdio>using namespace std;struct Node{ int x,y;} node[30];struct P{ int one,two,three;} p[1000];int used[300][300];bool judge(int i,int j,int k){ if(((node[j].x-node[i].x)*(node[k].y-node[j].y))-((node[k].x-node[j].x)*(node[j].y-node[i].y))==0)return false; else return true;}void solve(int i,int j,int k,int cnt){ int temp[3]; temp[0]=(node[i].x-node[j].x)*(node[i].x-node[j].x)+(node[i].y-node[j].y)*(node[i].y-node[j].y); temp[1]=(node[i].x-node[k].x)*(node[i].x-node[k].x)+(node[i].y-node[k].y)*(node[i].y-node[k].y); temp[2]=(node[k].x-node[j].x)*(node[k].x-node[j].x)+(node[k].y-node[j].y)*(node[k].y-node[j].y); sort(temp,temp+3); p[cnt].one=temp[0]; p[cnt].two=temp[1]; p[cnt].three=temp[2];}int main(){ int n; while(cin>>n&&n) { memset(used,0,sizeof(used)); int cas=0; for(int i=0; i<n; i++) { int a,b; cin>>a>>b; a+=100;b+=100; if(used[a][b]==0) { used[a][b]=1; node[cas].x=a; node[cas].y=b; cas++; } } int cnt=0; for(int i=0; i<cas; i++) { for(int j=i+1; j<cas; j++) { for(int k=j+1; k<cas; k++) { if(judge(i,j,k)) { solve(i,j,k,cnt); cnt++; } } } } int ans1=0; for(int i=0; i<cnt; i++) { int ans2=0; for(int j=0; j<cnt; j++) { if(p[i].one*p[j].two==p[i].two*p[j].one&&p[i].one*p[j].three==p[i].three*p[j].one) { ans2++; } } ans1=max(ans1,ans2); } cout<<ans1<<endl; } return 0;}
阅读全文
0 0
- HDU 4082 Hou Yi's secret
- HDU 4082 Hou Yi's secret
- hdu 4082 Hou Yi's secret
- HDU - 4082 Hou Yi's secret
- HDU 4082 Hou Yi's secret
- HDU 4082 Hou Yi's secret
- HDU 4082 Hou Yi's secret
- hdu 4082 Hou Yi's secret 统计相似三角形 暴力
- HDU 4082 Hou Yi's secret 暴力枚举
- HDU 4082 Hou Yi's secret(暴力)
- HDU 4082 Hou Yi's secret --枚举
- hdu4082 Hou Yi's secret
- Hou Yi's secret(UVALive
- 【几何】2011 regional Beijing Site B——Hou Yi's secret——hdu 4082
- hdu 4082 Hou Yi's secret 枚举
- hdu 4082 Hou Yi's secret(水题但暴露了自己的一些问题)
- HDU 4082 Hou Yi's secret 伪相似三角形 && 2011 Asia Beijing Regional Contest
- HDU 4082 Hou Yi's secret-求相似三角形的最大个数-(坑货)
- epoll使用详解(精髓)
- PAT乙级 1040. 有几个PAT(25)--数学问题
- vi 和vim 的区别
- shell 算数运算
- PAT乙级 1041. 考试座位号(15)
- HDU 4082 Hou Yi's secret
- POJ1001Exponentiation,已AC
- 数据库 -MYSQL免安装过程
- Linux下取代top的进程管理工具 htop
- PAT乙级 1042. 字符统计(20)
- 比特币的成长之路
- Window 下安装 Redis
- Linux上Elasticsearch5版本集群管理工具head安装
- 数组排序