KIDx 的解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4082
当时比赛提交第十六次过了
注意点:
①判定三角形合法性
②理解好题意:多个相同的点只算一个
③数组大小开足够大
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
#define EP 1e-8
struct point{ //点
double x, y;
}p[20];
struct trangle{ //三角形(特征:2个角的(余弦值*2))
double A, B;
}tra[10005];
bool hash[205][205], vis[10005];
double dist (point a, point b) //欧式距离求边长
{
return sqrt ((a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y));
}
bool multi (point a, point b, point c) //叉积判断三点是否共线
{
double x1, y1, x2, y2;
x1 = b.x - a.x;
y1 = b.y - a.y;
x2 = c.x - b.x;
y2 = c.y - b.y;
int tp = x1 * y2 - x2 * y1;
if (tp == 0)
return false;
return true;
}
bool similar (trangle a, trangle b) //余弦值对应比较判定相似,2个角即可
{
if (fabs (a.A-b.A) <= EP && fabs (a.B-b.B) <= EP)
return true;
return false;
}
int main()
{
double e[3];
int n, i, j, k, num, tp, maxs;
while (scanf ("%d", &n), n)
{
memset (hash, false, sizeof(hash));
for (i = 0; i < n; i++)
{
scanf ("%lf%lf", &p[i].x, &p[i].y);
if (hash[(int)p[i].x+100][(int)p[i].y+100]) //出现过的点就不再要了
i--, n--;
hash[(int)p[i].x+100][(int)p[i].y+100] = true;
}
num = 0; //累计合法三角形个数
for (i = 0; i < n; i++) //获取所有合法三角形存放到tra
{
for (j = i + 1; j < n; j++)
{
for (k = j + 1; k < n; k++)
{
if (!multi (p[i], p[j], p[k])) //判定三角形合法性
continue;
e[0] = dist (p[i], p[j]);
e[1] = dist (p[i], p[k]);
e[2] = dist (p[j], p[k]);
sort (e, e+3); //三边排序实现对应比较
double a = e[0];
double b = e[1];
double c = e[2];
tra[num].A = (b*b + c*c - a*a)/b/c; //直接用(余弦值*2)对应判定
tra[num].B = (a*a + c*c - b*b)/a/c;
num++;
}
}
}
maxs = 0;
memset (vis, false, sizeof(vis));
for (i = 0; i < num; i++) //以一个三角形为基准往下比较数相似三角形
{
if (vis[i]) //已经访问过的就不必再以它为准了
continue;
tp = 1;
for (j = i + 1; j < num; j++)
{
if (vis[j])
continue;
if (similar (tra[i], tra[j]))
tp++, vis[j] = true;
}
if (tp > maxs)
maxs = tp;
}
printf ("%d\n", maxs);
}
}
- 大小: 2 KB
- 大小: 6.1 KB
分享到:
相关推荐
ACM/ICPC参赛者必备!模版库,数十页的C++代码,涵盖ACM/ICPC中出现的各种算法!此为吉林大学版,内容相对比较全,排版质量是各校的模板中最好的!
ACM/ICPC亚洲预赛成都赛区网络赛真题,分享给广大热衷于ACM的人们们!
acm/icpc 课件 贪心 递归 图论 最大矩阵乘积 acm/icpc 课件 贪心 递归 图论 最大矩阵乘积 acm/icpc 课件 贪心 递归 图论 最大矩阵乘积 acm/icpc 课件 贪心 递归 图论 最大矩阵乘积 acm/icpc 课件 贪心 递归 图论 ...
2008年ACM-ICPC成都赛区现场赛题目
ACM/ICPC2009 拉丁美洲区域赛 包含输入输出数据 题目PDF文档 详细解题报告+答案代码TXT文档 有一半是水题,2、3个比较难的 大家可以拿来做做 其中的输入输出数据,可以放到那个离线OJ系统去判断你的程序对错。(离线...
The 36th ACM/ICPC Asia Regional Shanghai Site —— Online Contest Problem Set
ACM/ICPC大赛
有关于2011华中南赛区ACM/ICPC程序设计邀请赛及“永新视博”杯程序设计大赛的解题报告,希望对名位有所帮助!!!!!
ACM/ICPC中国*辽宁第二届大学生程序设计竞赛题目
2010年ACM/ICPC珠海区域赛决赛题目
acm/icpc算法集合。acm/icpc算法集合。acm/icpc算法集合。
搜索
ACM/ICPC World Finals 1990 task
第34届ACM/ICPC亚洲区预选赛合肥赛区网络预选赛试题
2013 ACM_ICPC 南京赛区网络赛题目
北京大学多次承担ACM/ICPC亚洲区预选赛命题,广获好评。近几年负责命题的赛区有:2008年北京赛区,2009年宁波赛区,2010年杭州赛区,2010年福州赛区,2011年北京赛区,2011年福州赛区,2012年金华赛区,2012年杭州...
ACM/ICPC的教学与实践
浙江师范大学 ACM/ICPC 集训队――算法设计入门学习资料浙江师范大学 ACM/ICPC 集训队――算法设计入门学习资料
ACM/icpc的练习题目分类,非常全面的关于poj题目的分类