题意: 给n个点,问最多有多少个相似三角形(三个角对应相等)。

解法: O(n^3)枚举点,形成三角形,然后记录三个角,最后按三个角度依次排个序,算一下最多有多少个连续相等的三元组就可以了。

注意:在同一个坐标的两点只算一次,所以要判一下。

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#define eps 1e-8
using namespace std;
#define N 100017 struct Point{
double x,y;
Point(double x=, double y=):x(x),y(y) {}
void input() { scanf("%lf%lf",&x,&y); }
};
typedef Point Vector;
int dcmp(double x) {
if(x < -eps) return -;
if(x > eps) return ;
return ;
}
template <class T> T sqr(T x) { return x * x;}
Vector operator + (Vector A, Vector B) { return Vector(A.x + B.x, A.y + B.y); }
Vector operator - (Vector A, Vector B) { return Vector(A.x - B.x, A.y - B.y); }
Vector operator * (Vector A, double p) { return Vector(A.x*p, A.y*p); }
Vector operator / (Vector A, double p) { return Vector(A.x/p, A.y/p); }
bool operator < (const Point& a, const Point& b) { return a.x < b.x || (a.x == b.x && a.y < b.y); }
bool operator >= (const Point& a, const Point& b) { return a.x >= b.x && a.y >= b.y; }
bool operator <= (const Point& a, const Point& b) { return a.x <= b.x && a.y <= b.y; }
bool operator == (const Point& a, const Point& b) { return dcmp(a.x-b.x) == && dcmp(a.y-b.y) == ; }
double Dot(Vector A, Vector B) { return A.x*B.x + A.y*B.y; }
double Length(Vector A) { return sqrt(Dot(A, A)); }
double Angle(Vector A, Vector B) { return (Dot(A, B) / Length(A) / Length(B)); }
double Cross(Vector A, Vector B) { return A.x*B.y - A.y*B.x; } //data segment
struct Tri{
double A[];
Tri(double x,double y,double z)
{ A[] = x, A[] = y, A[] = z; }
Tri(){}
bool operator <(const Tri& a)const
{
if(dcmp(A[]-a.A[]) == )
{
if(dcmp(A[]-a.A[])==) return dcmp(A[]-a.A[])<;
return dcmp(A[]-a.A[])<;
}
return dcmp(A[]-a.A[])<;
}
}t[];
bool operator == (const Tri& a,const Tri& b) { return dcmp(a.A[]-b.A[]) == && dcmp(a.A[]-b.A[]) == && dcmp(a.A[]-b.A[]) == ; }
Point p[];
int tot,n;
//data ends
int mp[][];
int main()
{
int i,j,k;
int a[];
while(scanf("%d",&n)!=EOF && n)
{
memset(mp,,sizeof mp);
tot = ;
int cntt=;
for(i=;i<=n;i++)
{
int a,b;scanf("%d%d",&a,&b);
if(mp[a+][b+]==)
p[cntt].x=a,p[cntt++].y=b;
mp[a+][+b]=;
}
n=cntt-;
for(i=;i<=n;i++)
{
for(j=i+;j<=n;j++)
{
for(k=j+;k<=n;k++)
{
Point A = p[i], B = p[j], C = p[k];
if(A == B || A == C || B == C) continue;
if(dcmp(Cross(B-A,C-A)) == ) continue;
double ang1 = Angle(B-A,C-A);
double ang2 = Angle(A-B,C-B);
double ang3 = Angle(A-C,B-C);
double A1 = min(ang1,min(ang2,ang3));
double A3 = max(ang1,max(ang2,ang3));
double A2 = ang1+ang2+ang3-A1-A3;
t[++tot] = Tri(A1,A2,A3);
}
}
}
sort(t+,t+tot+);
int Maxi = (tot!=), cnt = ;
for(i=;i<=tot;i++)
{
if(t[i] == t[i-])
cnt++;
else
cnt = ;
Maxi = max(Maxi,cnt);
}
cout<<Maxi<<endl;
}
return ;
}

HDU 4082 Hou Yi's secret --枚举的更多相关文章

  1. hdu 4082 Hou Yi's secret(暴力枚举)

    Hou Yi's secret Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  2. [HDU 4082] Hou Yi's secret (简单计算几何)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4082 题目大意: 给你n个点,问能最多构成多少个相似三角形. 用余弦定理,计算三个角度,然后暴力数有多 ...

  3. HDU 4082 Hou Yi's secret(暴力)

    直接6重循环就行了吧...判三角形相似直接从小到大枚举两向量夹角是否相等就行了.注意去重点跟三点共线就行了... #include<algorithm> #include<iostr ...

  4. HDU - 4082 Hou Yi's secret

    题意:射箭落在n个点,任取三点可构成一个三角形,问最大的相似三角形集(一组互相相似的三角形)的个数. 分析: 1.若n个点中有相同的点,要去重,题目中说射箭会形成洞,任选三个洞构成三角形,因此射在同一 ...

  5. hdu 1172 猜数字(暴力枚举)

    题目 这是一道可以暴力枚举的水题. //以下两个都可以ac,其实差不多一样,呵呵 //1: //4 wei shu #include<stdio.h> struct tt { ],b[], ...

  6. hdu 1882 Strange Billboard(位运算+枚举)

    http://acm.hdu.edu.cn/showproblem.php?pid=1882 感觉非常不错的一道题. 给一个n*m(1<=n,m<=16)的矩阵,每一个格子都有黑白两面,当 ...

  7. HDU 1281——棋盘游戏——————【最大匹配、枚举删点、邻接表方式】

     棋盘游戏 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status ...

  8. Hdu 5371 Hotaru's problem (manacher+枚举)

    题目链接: Hdu 5371 Hotaru's problem 题目描述: 给出一个字符串N,要求找出一条N的最长连续子串.这个子串要满足:1:可以平均分成三段,2:第一段和第三段相等,3:第一段和第 ...

  9. Hdu 5358 First One (尺取法+枚举)

    题目链接: Hdu 5358 First One 题目描述: 数组a有n个元素,S[i,j]定义为a[i]+a[i+1]+.....+a[j],问:这个死东西等于多少? 解题思路: 二分肯定超,这个题 ...

随机推荐

  1. Servlet3.0 Test

    1. Servlet3.0 Test and Annotation used 你可以从tomcat7中lib文件夹中找到servlet-api.jar package com.goodfan.serv ...

  2. python flask应用部署

    失败版本:flask+uwsgi ini配置文件 [uwsgi] callable = app ;//程序内启用的application变量名 home = /home/jcuan/code/pyth ...

  3. 那些教程没有的php2-对象

    php.net 对象 在类定义内部,可以用 new self 和 new parent 创建新对象. 当把一个对象已经创建的实例赋给一个新变量时,新变量会访问同一个实例,就和用该对象赋值一样.可以用克 ...

  4. 【原创】使用.NET Core 1.0创建一个Self-Contained控制台应用

    开发机器:win7-x64 .NET Core版本:1.0.0-preview2-003121 Visual Studio Code:1.2.1 至于什么是Self-Contained应用类型以及与P ...

  5. django配置fcgi参数解释

    manage.py runfcgi minspare=50 maxspare=200 maxchildren=1000 maxrequests=99999 host=127.0.0.1 port=80 ...

  6. mysql实时同步到mssql的解决方案

    数据库在应用程序中是必不可少的部分,mysql是开源的,所以很多人它,mssql是微软的,用在windows平台上是非常方便的,所以也有很多人用它.现在问题来了,如何将这两个数据库同步,即数据内容保持 ...

  7. android 读中文文本文件

    AndroidManifest.xml中 加入: <!-- 在SDCard中创建与删除文件权限 --> <uses-permission android:name="and ...

  8. Windows 2012 R2中安装SharePoint 2013 sp1参考

    之前介绍过在window 2012中安装SharePoint 2013,这次,借着SharePoint 2013 sp1补丁发布之际,介绍下在window 2012 r2中安装SharePoint 2 ...

  9. Sharepoint学习笔记—习题系列--70-573习题解析 -(Q70-Q72)

    Question 70You plan to create one provider Web Part and two consumer Web Parts.You need to ensure th ...

  10. Swift面向对象基础(上)——Swift中的类和结构体(下)

    学习来自<极客学院> import Foundation class User { var name:String var age:Int init(name:String,age:Int ...