麦兜是个淘气的孩子。一天,他在玩钢笔的时候把墨水洒在了白色的墙上。再过一会,麦兜妈就要回来了,麦兜为了不让妈妈知道这件事情,就想用一个白色的凸多边形把墙上的墨点盖住。你能告诉麦兜最小需要面积多大的凸多边形才能把这些墨点盖住吗? 
现在,给出了这些墨点的坐标,请帮助麦兜计算出覆盖这些墨点的最小凸多边形的面积。

Description
多组测试数据。第一行是一个整数T,表明一共有T组测试数据。 
每组测试数据的第一行是一个正整数N(0< N < = 105),表明了墨点的数量。接下来的N行每行包含了两个整数Xi和Yi(0<=Xi,Yi<=2000),表示每个墨点的坐标。每行的坐标间可能包含多个空格。

Input
每行输出一组测试数据的结果,只需输出最小凸多边形的面积。面积是个实数,小数点后面保留一位即可,不需要多余的空格。

Output
1
2
3
4
5
6
7
8
9
2
4
0 0
1 0
0 1
1 1
2
0 0
0 1
Sample Input
1
2
1.0
0.0
Sample Output
Hint
 
 
就是一个凸包的点集覆盖求最小覆盖面积~~~
一个告诉多边形顶点坐标的面积求法(按顺序给出)
 area += (pos.x*tmp.y - pos.y*tmp.x) / 2.0;(pos当前点,tmp下一个点,最后一个点和第一个点在来一次)
 
 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<stack>
#include<cmath>
using namespace std;
struct node{
double x, y;
}point[], pos, tmp;
double dis(node a, node b){
return pow((a.x - b.y), ) + pow((a.y - b.y), );
}
//按点集分布排序,利用向量平行关系判断(极角排序),角度相同则距离小的在前面
bool cmp(node a, node b){
double povit = (a.x - pos.x)*(b.y - pos.y) - (b.x - pos.x)*(a.y - pos.y);
if (povit > || !povit && (dis(a, pos) < dis(b, pos)))
return true;
return false;
}
//当前点是否在点集左侧,利用叉乘比较3个点两条线的斜率关系
bool turn_left(node p1, node p2, node p3){
return (p2.x*p1.y + p3.x*p2.y + p1.x*p3.y - p3.x*p1.y - p1.x*p2.y - p2.x*p3.y) > ? true : false;
}
int main(){
int i, sign, n, t;
double area;
cin >> t;
while (t--){
cin >> n;
for (i = ; i < n; i++)
cin >> point[i].x >> point[i].y;
if (n <= ){
cout << "0.0\n";
continue;
}
stack<node> Q;
sign = ;
pos = point[];
for (i = ; i < n; i++){
if (pos.y == point[i].y&&pos.x>point[i].x || point[i].y < pos.y){
pos = point[i];
sign = i;
}
}
swap(point[], point[sign]);
sort(point + , point + n, cmp);
Q.push(point[]), Q.push(point[]), Q.push(point[]);
for (i = ; i < n; i++){
while (!Q.empty()){
tmp = Q.top();
Q.pop();
if (turn_left(tmp, Q.top(), point[i])){
Q.push(tmp);
break;
}
}
Q.push(point[i]);
}
area = ;
tmp = Q.top(), Q.pop();
area += (pos.x*tmp.y - pos.y*tmp.x) / 2.0;
while (!Q.empty()){
area += (tmp.x*Q.top().y - tmp.y*Q.top().x) / 2.0;
tmp = Q.top();
Q.pop();
}
printf("%.1lf\n", fabs(area));
}
return ;
}

主要的地方就是利用向量平行关系,按点集的离散化排序

(没说清楚~~~看凸包的简单概念吧http://www.cnblogs.com/zyxStar/p/4540984.html),

判断下一个的点能否覆盖已选取的点~~

[Swust OJ 249]--凸包面积的更多相关文章

  1. [Swust OJ 567]--老虎在不在笼子里(凸包问题)

    题目链接:http://acm.swust.edu.cn/problem/567/ Time limit(ms): 1000 Memory limit(kb): 65535   一只老虎自从看了< ...

  2. POJ 3348 - Cows 凸包面积

    求凸包面积.求结果后不用加绝对值,这是BBS()排序决定的. //Ps 熟练了template <class T>之后用起来真心方便= = //POJ 3348 //凸包面积 //1A 2 ...

  3. [Swust OJ 404]--最小代价树(动态规划)

    题目链接:http://acm.swust.edu.cn/problem/code/745255/ Time limit(ms): 1000 Memory limit(kb): 65535   Des ...

  4. [Swust OJ 649]--NBA Finals(dp,后台略(hen)坑)

    题目链接:http://acm.swust.edu.cn/problem/649/ Time limit(ms): 1000 Memory limit(kb): 65535 Consider two ...

  5. poj 3348 Cow 凸包面积

    Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8122   Accepted: 3674 Description ...

  6. poj 3348:Cows(计算几何,求凸包面积)

    Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 6199   Accepted: 2822 Description ...

  7. uva109求凸包面积,判断点是不是在凸包内

    自己想了一个方法判断点是不是在凸包内,先求出凸包面积,在求由点与凸包上每两个点之间的面积(点已经排好序了),如果两者相等,则点在凸包内,否则不在(时间复杂度可能有点高)但是这题能过 #include& ...

  8. poj3348凸包面积

    用叉积求凸包面积 如图所示,每次找p[0]来计算,(叉积是以两个向量构成的平行四边形的面积,所以要/2) #include<map> #include<set> #includ ...

  9. poj 3348(凸包面积)

    Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8063   Accepted: 3651 Description ...

随机推荐

  1. nodejs入门demo

    demo的实例引用自:http://www.runoob.com/nodejs/nodejs-event.html, 官方文档:https://nodejs.org/dist/latest-v6.x/ ...

  2. 创建txt格式文本日志

    公共方法(可以将其放到类库里边): #region 记录日志 #region 写日志 /// <summary> /// 写日志 /// </summary> /// < ...

  3. java 实现 一个账号只能在一个地方登陆,其他地方被下线

    其实方法有很多的,我这献丑了. 使用理解java 四大作用域. 思路:理解java 四大作用域的关键. 第一个地方登陆: 1.得到请求的SessionId 和 登陆的 用户名 2.把SessionId ...

  4. 数据库比对脚本(PHP版)

    $config = [ 'hotfix' => [ 'host'=>'', 'port'=>'', 'account'=>'', 'password'=>'', 'dat ...

  5. 关于block 用法

    Block  Apple 在C, Objective-C, C++加上Block這個延申用法.目前只有Mac 10.6 和iOS 4有支援.Block是由一堆可執行的程式組成,也可以稱做沒有名字的Fu ...

  6. 记NOIP分数出来前

    咩~成绩还没有出来呢!但是拿到了每个人的程序,还有一堆民间的数据.我测了好多不同的数据,基本上D1T1,D2T1,D2T2的都是暴力解决掉的,没有什么问题,唯一就是D1T2的link那一题,写的时候2 ...

  7. Struts2 学习笔记15 Struts标签 part1

    来说一下Struts标签,之前我们也很多地方用到了,还是来总结一下. 首先是property标签. <li>property:<s:property value="user ...

  8. Desert King(最优比率生成树)

    Desert King Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 22717   Accepted: 6374 Desc ...

  9. SharePoint Secure Store Service(SSSS)的使用(一)

    SSS在案例中的应用: SSS介绍 SSS部署 SSS应用 http://www.cnblogs.com/renzh/archive/2013/03/31/2990280.html 创建.部署.应用S ...

  10. 更新Windows Azure Web Site中的Orchard版本

    官方建议大家使用本地副本来更新 1.首先做个全站备份,这样更新好以后出问题你就很容易回滚 . Web Site 做备份很方便.把网站SCALE设置到STANDARD,然后在BACKUPS页面里面点备份 ...