hdu - 4709 - Herding
题意:给出N个点的坐标,从中取些点来组成一个多边形,求这个多边形的最小面积,组不成多边形的输出"Impossible"(测试组数 T <= 25, 1 <= N <= 100, -1000 <= 坐标Xi, Yi <= 1000)。
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4709
——>>面积最小,若有的话,一定是三角形。判断3点是否能组成一个三角形,若用斜率来做,麻烦且可能会有精度误差,用叉积来判断甚好(只需判断两向量的叉积是否为0)。
注意:N可为1、2,这时不能判断三角形。
- #include <cstdio>
- #include <cmath>
- #include <algorithm>
- using namespace std;
- const int maxn = 100 + 10;
- const double eps = 1e-10;
- const double INF = 1 << 30;
- int N;
- struct Point{
- double x;
- double y;
- Point(double x = 0, double y = 0):x(x), y(y){}
- }p[maxn];
- typedef Point Vector;
- Vector operator + (Point A, Point B){
- return Vector(A.x + B.x, A.y + B.y);
- }
- Vector operator - (Point A, Point B){
- return Vector(A.x - B.x, A.y - B.y);
- }
- Vector operator * (Point A, double p){
- return Vector(A.x * p, A.y * p);
- }
- Vector operator / (Point A, double p){
- return Vector(A.x / p, A.y / p);
- }
- double Cross(Vector A, Vector B){
- return A.x * B.y - B.x * A.y;
- }
- double Area2(Point A, Point B, Point C){
- return Cross(B-A, C-A);
- }
- int dcmp(double x){
- if(fabs(x) < eps) return 0;
- else return x < 0 ? -1 : 1;
- }
- void read(){
- scanf("%d", &N);
- for(int i = 0; i < N; i++) scanf("%lf%lf", &p[i].x, &p[i].y);
- }
- void solve(){
- double Min = INF;
- if(N >= 3){
- for(int i = 0; i < N; i++)
- for(int j = i+1; j < N; j++)
- for(int k = j+1; k < N; k++) if(dcmp(Cross(p[j] - p[i], p[k] - p[i]))){
- double temp = fabs(Area2(p[i], p[j], p[k]));
- Min = min(Min, temp);
- }
- }
- if(dcmp(Min - INF) == 0) puts("Impossible");
- else printf("%.2f\n", Min/2);
- }
- int main()
- {
- int T;
- scanf("%d", &T);
- while(T--){
- read();
- solve();
- }
- return 0;
- }
hdu - 4709 - Herding的更多相关文章
- hdu 4709:Herding(叉积求三角形面积+枚举)
Herding Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- HDU 4709 Herding (枚举)
Herding Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- hdu 4709 Herding hdu 2013 热身赛
题意:给出笛卡尔坐标系上 n 个点,n不大于100,求出这些点中能围出的最小面积. 可以肯定的是三个点围成的面积是最小的,然后就暴力枚举,计算任意三点围成的面积.刚开始是求出三边的长,然后求面积,运算 ...
- HDU 4709 Herding 几何题解
求全部点组成的三角形最小的面积,0除外. 本题就枚举全部能够组成的三角形,然后保存最小的就是答案了.由于数据量非常少. 复习一下怎样求三角形面积.最简便的方法就是向量叉乘的知识了. 并且是二维向量叉乘 ...
- 学习数论 HDU 4709
经过杭师大校赛的打击,明白了数学知识的重要性 开始学习数论,开始找题练手 Herding HDU - 4709 Little John is herding his father's cattles. ...
- HDU 4709:Herding
Herding Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ...
- 【Herding HDU - 4709 】【数学(利用叉乘计算三角形面积)】
题意:给出n个点的坐标,问取出其中任意点围成的区域的最小值! 很明显,找到一个合适的三角形即可. #include<iostream> #include<cstdio> #in ...
- HDU 4709 3-idiots FFT 多项式
http://acm.hdu.edu.cn/showproblem.php?pid=4609 给一堆边,求这一堆边随便挑三个能组成三角形的概率. 裸fft,被垃圾题解坑了还以为很难. 最长的边的长度小 ...
- HDU Herding
F - Herding Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Subm ...
随机推荐
- C++类静态成员变量和const常量的初始化方法
C++类静态成员变量和const常量在定义类的时候就必须初始化,否则都会编译出错. 而具初始化方法为: C++类静态成员变量初始化方法 #include <iostream> #inclu ...
- SqlBulkCopy使用介绍以及注意事项
SqlBulkCopy,微软提供的快速插入类,针对大批量数据操作,此类效果明显有所提升,以下是微软官方解释: Microsoft SQL Server 提供一个称为 bcp 的流行的命令提示符实用工具 ...
- C#关于params的用法(使用数量可变的参数)
有些方法需要传递个数不定的值进行运算.比如求最小值的方法.除了用容器外,还可以使用params来做 例子如下: using System; using System.Collections.Gener ...
- mysql操作SQL语句
二.数据库操作SQL语句1.显示服务器上当前存在什么数据库SHOW DATABASES; 2.创建名称为rewin的数据库CREATE DATABASE rewin; 3.删除名称为rewin的数据库 ...
- 测试 windows live writer
This is the first article written by the writer! wenzhaoshanda
- android一些常用的代码1(收藏)
以下内容来自多个开源项目的整理和自己的项目积累. 1.拨打电话 public static void call(Context context, String phoneNumber) { conte ...
- codeforces #332 div2
A. #include<cstdio> #include<algorithm> #include<cmath> #include<map> #inclu ...
- 设计模式之桥接模式(Bridge)--结构模型
1.意图 将抽象部分与它的实现部分分离,使它们可以独立地变化. 2.适用性 你不希望在抽象和它的实现部分之间有一个固定的绑定关系. 类的抽象与它的实现都应该可以通过子类的方式加以扩展. 抽象部分与实现 ...
- VC++深入详解读书笔记-第七章对话框
1.在MFC中,所有的控件类都是由CWnd类派生来的,因此,控件实际上也是窗口. 2. 3.对话框的种类 模态对话框 模态对话框是指当其显示时,程序会暂时执行,直到关闭这个模态对话框后,才能继续执行程 ...
- j2ee基础
1.tomcat端口被占用解决方式 使用netstat -anb查看哪个进程占用,禁止掉 修改tomacat使用的端口,在配置文件conf/server.xml 2.web app目录 3.如何建立虚 ...