题目:Finding Mine

题意:给你n个点,m个金矿点,找一个多边形,使得多边形的面积除以这个多边形内的金矿点个数的比值最小。

思路:其实就是找一个比值最小的三角形就行了,因为其他的三角形的比值都比它大,组合成多边形后势必会将比值变大。可以简短的证明的。

#include <iostream>
#include <string.h>
#include <stdio.h>
#include <math.h>
#include <algorithm>
using namespace std;
struct Point
{
int x,y;
bool operator<(const Point &cmp) const
{
return x<cmp.x;
}
};
Point p[210];
Point mine[510];
int cross(Point A,Point B,Point C)
{
return (B.x-A.x)*(C.y-A.y)-(B.y-A.y)*(C.x-A.x);
}
int n,m;
int num[210][510];
void Init(Point a,Point b,int &cnt)
{
int x1=a.x;
int x2=b.x;
for(int i=0;i<m;i++)
if(x1<=mine[i].x&&mine[i].x<x2)
if(cross(a,b,mine[i])>0)
cnt++;
}
int main()
{
int t,cas=1;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
scanf("%d%d",&p[i].x,&p[i].y);
sort(p,p+n);
for(int i=0;i<m;i++)
scanf("%d%d",&mine[i].x,&mine[i].y);
for(int i=0;i<n;i++)
for(int j=i+1;j<n;j++)
Init(p[i],p[j],num[i][j]=0);
double ans=-1;
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
for(int k=j+1;k<n;k++)
{
int cnt=num[i][k]-num[i][j]-num[j][k];
if(cnt==0) continue;
double area=cross(p[i],p[j],p[k])/2.0;
double tmp=fabs(area/cnt);
if(ans==-1||tmp<ans) ans=tmp;
}
}
}
printf("Case #%d: ",cas++);
if(ans==-1) puts("-1");
else        printf("%.6lf\n",ans);
}
return 0;
}

HDU4353(找一个三角形面积与它里面包含点的比值最小)相关推荐

  1. 计算三角形面积的代码

    计算一个三角形面积,已知边长为a,b,c,s=根号下(s-a)*(s-b)*(s-c)*s,求面积 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdi ...

  2. Java黑皮书课后题第8章:*8.32(几何:三角形面积)编写一个方法,使用下面的方法头,返回一个三角形的面积。编写一个程序,提示用户输入三角形的三个点,然后显示三角形的面积

    *8.32(几何:三角形面积)编写一个方法,使用下面的方法头,返回一个三角形的面积.编写一个程序,提示用户输入三角形的三个点,然后显示三角形的面积 题目 题目描述与运行示例 破题 代码 题目 题目描述 ...

  3. 三角形面积=SQRT(S*(S-a)*(S-b)*(S-c)) 其中S=(a+b+c)/2,a、b、c为三角形的三边。 定义两个带参的宏,一个用来求area, 另一个宏用来求S。 写程序,在程序中用带

    题目描述 三角形面积=SQRT(S*(S-a)*(S-b)*(S-c)) 其中S=(a+b+c)/2,a.b.c为三角形的三边. 定义两个带参的宏,一个用来求area, 另一个宏用来求S. 写程序,在 ...

  4. 根据给定的三边,判断能否则组成一个三角形若能用这三个数作为边长组成三角形( 任意两边之和大于第三边),能组成三角形计算并输出该三角形的面积,否则输出Can‘t。 (提示:Can‘t输出直接放到双引号中

    一.题目背景 求三角形面积 题目描述: 根据给定的三边,判断能否则组成一个三角形若能用这三个数作为边长组成三角形( 任意两边之和大于第三边),能组成三角形计算并输出该三角形的面积,否则输出Can't. ...

  5. Java练习题 类 先创建一个Point类,然后定义Trianglele类。在Trianglele类中定义三个Point的实体来表示一个三角形的三个点,然后定义两个方法求三角形的周长、面积。

    先创建一个Point类,然后定义Trianglele类. 在Trianglele类中定义三个Point的实体来表示一个三角形的三个点,再定义构造方法对这三个点进行初始化,然后定义两个方法求三角形的周长 ...

  6. 定义一个三角形类(TRI)及其派生类三角柱体类(COL)。其中三角形类可以计算三角形的面积和周长;三角柱体类可以计算柱体的体积和表面积。其具体要求如下: (1)TRI的成员如下:  私有数据成员 

    题目要求: 定义一个三角形类(TRI)及其派生类三角柱体类(COL).其中三角形类可以计算三角形的面积和周长:三角柱体类可以计算柱体的体积和表面积.其具体要求如下: (1)TRI的成员如下: 私有数据 ...

  7. 用学过的python写一个计算三角形面积和周长

    def test(test_name):def trilateral():count = 0while True:a = input('请输入三角形的第一条边长,请输入整数或小数')if a.isdi ...

  8. 定义一个三角形类Ctriangle,求三角形面积和周长。

    /*定义一个三角形类Ctriangle,求三角形面积和周长.若这三边无法组成一个三角形则不用计算就退出.*/ #include<iostream> #include<cmath> ...

  9. 计算机用海伦公式计算三角形面积,C++ 编程 关于用海伦公式计算三角形面积的一个程序...

    用海伦公式计算三角形面积,具体方法如下: 1.首先打开我们的DEV C++软件,点击"新建源代码". 在编辑页面输入以下代码: #include int main() { fola ...

最新文章

  1. 夏俊:深入网站服务端技术(一)——网站并发的问题
  2. vue点击改变data_vue实现响应式原理即vue如何监听data的每个属性的变化
  3. java checkstyle 导入_Checkstyle的配置详解
  4. 《剑指offer》题目说明
  5. python 安装xpath_Python网络爬虫(四)- XPath1.XPath2.XPath在python中的应用
  6. 怎样使set现程变得安全_使不安全变得更加安全
  7. java完全解耦_java-完全解耦
  8. kibana下载安装
  9. 064_将 Linux 系统中 UID 大于等于 1000 的普通用户都删除
  10. 通过整数索引选择一行熊猫系列/数据框
  11. Golang 协程的使用方法
  12. 20200201每日一句
  13. 嵌入式linux基础学习全套精品视频教程
  14. 关于OCR身份证识别
  15. 备忘录:XCode配置
  16. MLP is Maybe Your Need
  17. 尼采“最孤独者”“忧郁颂”
  18. Android API统计
  19. 用 GreaseMonkey (油猴)解码 TinyURL
  20. 气象环境监测系统有哪些组成设备

热门文章

  1. 声明式事务控制的配置要点
  2. 模版设计模式概述和使用
  3. 前端权限控制:实现思路分析-待修改
  4. Servlet_生命周期方法
  5. Redis实现分布式锁释放锁
  6. 【多态】向上转型调用方法的规则
  7. Cortex‐M3-存储器保护单元(MPU)
  8. 基于 DataLakeAnalytics 做跨地域的数据分析 1
  9. 微信小程序出现【需要进行身份验证】弹框解决方法
  10. MySQL从库的列类型不一致导致的复制异常问题