HDU-3548-Enumerate the Triangles
求由所有的点组成的三角形中周长最小的三角形的周长
1.将所有的点按横坐标大小排序
2.从第一个点开始往后枚举,判断能否组成三角形,判断当前三角形周长是否小于已经得到的最小周长
代码如下:
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cmath>
using namespace std;
const double INF=1000000000.0;
double juli(double x1,double y1,double x2,double y2)
{
return (sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)));
}
struct point
{
int x;
int y;
} p[+];
bool cmp(point a,point b)
{
return a.x<b.x;
}
bool One_Line(const point& s1,const point &s2,const point &s3 )
{
return (s3.x-s2.x)*(s2.y-s1.y) == (s2.x-s1.x)*(s3.y-s2.y);
}
int main()
{
int T,n,i,j,t=;
scanf("%d",&T);
while(T--)
{
cin>>n;
for(i=; i<n; i++)
cin>>p[i].x>>p[i].y;
sort(p,p+n,cmp);
double mini=INF;
int flog=;
for(i=; i<n; i++)
{
for(j=i+; j<n; j++)
{
if(mini<=*(p[j].x-p[i].x)) break ;//横坐标的差大于周长的一半,它都大于周长的一半了
//由这两点组成的三角形周长肯定大于mini,不要
double a1=juli(p[i].x,p[i].y,p[j].x,p[j].y);
if(mini<=*a1) continue ; //同上,只是不跳出循环,判断下一个
for(int k=j+; k<n; k++)
{
if(mini<=*(p[j].x-p[k].x)) break ;
if(One_Line(p[i],p[j],p[k])) continue ;
double a2=juli(p[j].x,p[j].y,p[k].x,p[k].y);
double a3=juli(p[i].x,p[i].y,p[k].x,p[k].y);
if(a1+a2+a3<mini)
{
mini=a1+a2+a3;
flog=;
}
}
}
}
cout<<"Case "<<t++<<": ";
if(flog) printf("%.3lf\n",mini);
else cout<<"No Solution"<<endl;
}
return ;
}
HDU-3548-Enumerate the Triangles的更多相关文章
- hdu 5784 How Many Triangles 计算几何,平面有多少个锐角三角形
How Many Triangles 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5784 Description Alice has n poin ...
- HDU 5784 How Many Triangles
计算几何,极角排序,双指针,二分. 直接找锐角三角形的个数不好找,可以通过反面来求解. 首先,$n$个点最多能组成三角形个数有$C_n^3$个,但是这之中还包括了直角三角形,钝角三角形,平角三角形,我 ...
- [HDU 5135] Little Zu Chongzhi's Triangles (dfs暴搜)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5135 题目大意:给你n条边,选出若干条边,组成若干个三角形,使得面积和最大.输出最大的面积和. 先将边 ...
- hdu 1396 Counting Triangles(递推)
Counting Triangles Problem Description Given an equilateral triangle with n thelength of its side, p ...
- hdu 5135 Little Zu Chongzhi's Triangles
http://acm.hdu.edu.cn/showproblem.php?pid=5135 题意:给你N个木棍的长度,然后让你组成三角形,问你组成的三角形的和最大是多少? 思路:先求出可以组成的所有 ...
- HDU 5784 (计算几何)
Problem How Many Triangles (HDU 5784) 题目大意 给定平面上的n个点(n<2000),询问可以组成多少个锐角三角形. 解题分析 直接统计锐角三角形较困难,考虑 ...
- HDU 1176 免费馅饼:dp
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1176 题意: 横坐标范围为[0,10],你在第0秒站在坐标为5的地方. 在接下来的一段时间内,会有n个 ...
- Python generator 的yield (enumerate)
生成杨辉三角 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 def triangles(max): L = [1,] while len(L) - 1 < ...
- HDUOJ-Counting Triangles
Counting Triangles Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- 转载:hdu 题目分类 (侵删)
转载:from http://blog.csdn.net/qq_28236309/article/details/47818349 基础题:1000.1001.1004.1005.1008.1012. ...
随机推荐
- [转载]:Fortran字符串的故事
一. Fortran 字符串与 C 字符串的区别 Fortran的字符串处理能力其实很弱,关于字符串的语法还很落后.它与 C 字符串最大的区别就是:Fortran字符串是固定长度的,没有 \0 结束 ...
- Python 爬虫—— requests BeautifulSoup
本文记录下用来爬虫主要使用的两个库.第一个是requests,用这个库能很方便的下载网页,不用标准库里面各种urllib:第二个BeautifulSoup用来解析网页,不然自己用正则的话很烦. req ...
- 单链表在不知头结点的情况下对第i个元素的删除
一.首先,看看单链表中第i个元素的删除: Status ListDelete_L (LinkList &L,int i,ElemType &e){ //在带头结点的单链表L中,删除第i ...
- js 小工具-- 获取主机名
<script type="text/javascript"> function getHostName(url) { var host = "null&qu ...
- BCB中获得RichEdit 默认行间距
首先,这些功能支持RichEdit2.0 以上功能: 其次,用常规的方法是无法获得LineSpace 的: 你使用 EM_GETPARAFORMAT也得不到,你会发现dyLineSpacing 的值永 ...
- PHP面向对象的标准
(1)所有数据都应该隐藏在所在的类的内部. (2)类的使用者必须依赖类的共有接口,但类不能依赖它的使用者. (3)尽量减少类的协议中的消息. (4)实现所有类都理解的最基本公有接口[例如,拷贝操作(深 ...
- newCachedThreadPool线程池
public static ExecutorService newCachedThreadPool()创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们.对于执行很多短期异步任 ...
- android开源框架android-async-http使用
原文地址:http://www.open-open.com/lib/view/open1369637365753.html android-async-http开源框架可以是我们轻松的获取网络数据或者 ...
- java时间相减(转载)
package com.jie.java.phone; import java.text.ParseException; import java.text.SimpleDateFormat; impo ...
- 这是一个比较清晰的SSH框架结构,有兴趣的博友可以看一下
http://www.cnblogs.com/zhaowancheng/p/5841591.html