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. ...
随机推荐
- POS管理系统之新增设备入库
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"% ...
- node,不懂不懂
Four Day-------------------------node.js分对象全局/核心模块/文件模块path(核心模块)--作用:操作路径basername/获取传入路劲dimame/获取传 ...
- SHELL脚本攻略(学习笔记)--2.5 tr
tr主要用于映射结果集.压缩和删除字符.我个人感觉特别有用,特别是压缩连续空格(空行)为一个空格(空行),让不规则的信息变得规则. 2.5.1 tr映射 tr [options] [SET1] [SE ...
- C#连接数据库的四种方法
在进行以下连接数据库之前,请先在本地安装好Oracle Client,同时本次测试System.Data的版本为:2.0.0.0. 在安装Oracle Client上请注意,如果OS是3-BIT请安装 ...
- smarty模板原理
smarty模板原理 模板主要是用来让前端和后端分离的,前台页面只是一个前台页面,后台页面用php代码写逻辑,写完逻辑拿到前台显示. 一.写法 一般需要以下:写3个页面: 1.显示页面aa.htm ...
- 2.1 LibCurl编程流程(转)
转载地址:http://blog.chinaunix.net/u/17660/showart_1822514.html2 LibCurl编程2.1 LibCurl编程流程在基于LibCurl的程序里, ...
- mysql学习(二)
(1)存储过程:存储过程是SQL语句和控制语句的预编译集合,以一个名称存储并作为一个单元处理: (2)存储过程优点:增强SQL语句的功能和灵活性,实现较快的执行速度,减少网络流量: (3)存储过程结构 ...
- HashTable、HashSet和Dictionary的区别
今天又去面试了,结果依然很悲催,平时太过于关注表面上的东西,有些实质却不太清楚,遇到HashTable和Dictionary相关的知识,记录下来,希望对后来人有所帮助,以及对自己以后复习可以参考. 1 ...
- Linux上安装php
1.安装mysql http://blog.csdn.net/wy3552128/article/details/8143686 2.安装配置Apache http://blog.csdn.net ...
- Ubuntu遇到Please ensure that adb is correctly located at '...adb.exe' and can be executed 问题解决方法
上次我们在SDK更新的到最新的Android L版本之后,我发现我的ADT和android指定的版本不对应,我的ADT是22版本的,android L需要23版本以上的,版本不对应的话就无法加载这个S ...