题意:给出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,这时不能判断三角形。

  1. #include <cstdio>
  2. #include <cmath>
  3. #include <algorithm>
  4.  
  5. using namespace std;
  6.  
  7. const int maxn = 100 + 10;
  8. const double eps = 1e-10;
  9. const double INF = 1 << 30;
  10.  
  11. int N;
  12.  
  13. struct Point{
  14. double x;
  15. double y;
  16. Point(double x = 0, double y = 0):x(x), y(y){}
  17. }p[maxn];
  18.  
  19. typedef Point Vector;
  20.  
  21. Vector operator + (Point A, Point B){
  22. return Vector(A.x + B.x, A.y + B.y);
  23. }
  24.  
  25. Vector operator - (Point A, Point B){
  26. return Vector(A.x - B.x, A.y - B.y);
  27. }
  28.  
  29. Vector operator * (Point A, double p){
  30. return Vector(A.x * p, A.y * p);
  31. }
  32.  
  33. Vector operator / (Point A, double p){
  34. return Vector(A.x / p, A.y / p);
  35. }
  36.  
  37. double Cross(Vector A, Vector B){
  38. return A.x * B.y - B.x * A.y;
  39. }
  40.  
  41. double Area2(Point A, Point B, Point C){
  42. return Cross(B-A, C-A);
  43. }
  44.  
  45. int dcmp(double x){
  46. if(fabs(x) < eps) return 0;
  47. else return x < 0 ? -1 : 1;
  48. }
  49.  
  50. void read(){
  51. scanf("%d", &N);
  52. for(int i = 0; i < N; i++) scanf("%lf%lf", &p[i].x, &p[i].y);
  53. }
  54.  
  55. void solve(){
  56. double Min = INF;
  57. if(N >= 3){
  58. for(int i = 0; i < N; i++)
  59. for(int j = i+1; j < N; j++)
  60. for(int k = j+1; k < N; k++) if(dcmp(Cross(p[j] - p[i], p[k] - p[i]))){
  61. double temp = fabs(Area2(p[i], p[j], p[k]));
  62. Min = min(Min, temp);
  63. }
  64. }
  65. if(dcmp(Min - INF) == 0) puts("Impossible");
  66. else printf("%.2f\n", Min/2);
  67. }
  68.  
  69. int main()
  70. {
  71. int T;
  72. scanf("%d", &T);
  73. while(T--){
  74. read();
  75. solve();
  76. }
  77. return 0;
  78. }

hdu - 4709 - Herding的更多相关文章

  1. hdu 4709:Herding(叉积求三角形面积+枚举)

    Herding Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  2. HDU 4709 Herding (枚举)

    Herding Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  3. hdu 4709 Herding hdu 2013 热身赛

    题意:给出笛卡尔坐标系上 n 个点,n不大于100,求出这些点中能围出的最小面积. 可以肯定的是三个点围成的面积是最小的,然后就暴力枚举,计算任意三点围成的面积.刚开始是求出三边的长,然后求面积,运算 ...

  4. HDU 4709 Herding 几何题解

    求全部点组成的三角形最小的面积,0除外. 本题就枚举全部能够组成的三角形,然后保存最小的就是答案了.由于数据量非常少. 复习一下怎样求三角形面积.最简便的方法就是向量叉乘的知识了. 并且是二维向量叉乘 ...

  5. 学习数论 HDU 4709

    经过杭师大校赛的打击,明白了数学知识的重要性 开始学习数论,开始找题练手 Herding HDU - 4709 Little John is herding his father's cattles. ...

  6. HDU 4709:Herding

    Herding Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Su ...

  7. 【Herding HDU - 4709 】【数学(利用叉乘计算三角形面积)】

    题意:给出n个点的坐标,问取出其中任意点围成的区域的最小值! 很明显,找到一个合适的三角形即可. #include<iostream> #include<cstdio> #in ...

  8. HDU 4709 3-idiots FFT 多项式

    http://acm.hdu.edu.cn/showproblem.php?pid=4609 给一堆边,求这一堆边随便挑三个能组成三角形的概率. 裸fft,被垃圾题解坑了还以为很难. 最长的边的长度小 ...

  9. HDU Herding

    F - Herding Time Limit:1000MS       Memory Limit:32768KB      64bit IO Format:%I64d & %I64u Subm ...

随机推荐

  1. C++类静态成员变量和const常量的初始化方法

    C++类静态成员变量和const常量在定义类的时候就必须初始化,否则都会编译出错. 而具初始化方法为: C++类静态成员变量初始化方法 #include <iostream> #inclu ...

  2. SqlBulkCopy使用介绍以及注意事项

    SqlBulkCopy,微软提供的快速插入类,针对大批量数据操作,此类效果明显有所提升,以下是微软官方解释: Microsoft SQL Server 提供一个称为 bcp 的流行的命令提示符实用工具 ...

  3. C#关于params的用法(使用数量可变的参数)

    有些方法需要传递个数不定的值进行运算.比如求最小值的方法.除了用容器外,还可以使用params来做 例子如下: using System; using System.Collections.Gener ...

  4. mysql操作SQL语句

    二.数据库操作SQL语句1.显示服务器上当前存在什么数据库SHOW DATABASES; 2.创建名称为rewin的数据库CREATE DATABASE rewin; 3.删除名称为rewin的数据库 ...

  5. 测试 windows live writer

    This is the first article written by the writer!   wenzhaoshanda

  6. android一些常用的代码1(收藏)

    以下内容来自多个开源项目的整理和自己的项目积累. 1.拨打电话 public static void call(Context context, String phoneNumber) { conte ...

  7. codeforces #332 div2

    A. #include<cstdio> #include<algorithm> #include<cmath> #include<map> #inclu ...

  8. 设计模式之桥接模式(Bridge)--结构模型

    1.意图 将抽象部分与它的实现部分分离,使它们可以独立地变化. 2.适用性 你不希望在抽象和它的实现部分之间有一个固定的绑定关系. 类的抽象与它的实现都应该可以通过子类的方式加以扩展. 抽象部分与实现 ...

  9. VC++深入详解读书笔记-第七章对话框

    1.在MFC中,所有的控件类都是由CWnd类派生来的,因此,控件实际上也是窗口. 2. 3.对话框的种类 模态对话框 模态对话框是指当其显示时,程序会暂时执行,直到关闭这个模态对话框后,才能继续执行程 ...

  10. j2ee基础

    1.tomcat端口被占用解决方式 使用netstat -anb查看哪个进程占用,禁止掉 修改tomacat使用的端口,在配置文件conf/server.xml 2.web app目录 3.如何建立虚 ...