SWUST0249 (凸包面积)
type node=record x,y:longint; end;
const maxn=;
var k,q,qq:longint;
sum:double;
f,g:array[..maxn] of node;
m,i,j,a,b:longint;
stack:array[..maxn] of longint;
nm:longint;
function dis(a,b:node):double;
begin
exit(sqrt(sqr(a.x-b.x)+sqr(a.y-b.y)));
end;
procedure swap(var a,b:node); inline;
var c:node;
begin
c:=a; a:=b; b:=c;
end;
function dig(a,b:node):longint; inline;
begin
exit(a.x*b.y-a.y*b.x);
end;
function mk(a,b:node):node; inline;
begin
mk.x:=b.x-a.x;
mk.y:=b.y-a.y;
end;
function cmp(a,b:node):boolean; inline;
var p1,p2:node;
begin
p1:=mk(f[],a);
p2:=mk(f[],b);
if dig(P1,P2)< then exit(true);
if dig(P1,P2)= then
if dis(f[],a)>dis(f[],b) then
exit(true);
exit(false);
end;
procedure sort(l,r:longint);
var i,j:longint;
x:node;
begin
i:=l; j:=r; x:=f[(l+r) div ];
while i<=j do
begin
while cmp(f[i],x) do inc(i);
while cmp(x,f[j]) do dec(j);
if i<=j then
begin
swap(f[i],f[j]);
inc(i); dec(j);
end;
end;
if l<j then sort(l,j);
if i<r then sort(i,r);
end;
begin
readln(q);
for qq:= to q do
begin
readln(m);
for i:= to m do readln(f[i].x,f[i].y);
if m= then begin writeln('0.0'); continue; end;
j:=;
for i:= to m do
if (f[i].y<f[j].y) or (f[i].y=f[j].y) and (f[i].x<f[j].x) then
j:=i;
swap(f[],f[j]);
sort(,m);
k:=;
g[]:=f[]; g[]:=f[];
for i:= to m do
if dig(mk(f[],f[i]),mk(f[],f[i-]))<> then
begin
inc(k);
g[k]:=f[i];
end;
nm:=;
stack[]:=; stack[]:=; stack[]:=;
for i:= to k do
begin
a:=stack[nm-];
b:=stack[nm];
while dig(mk(g[a],g[b]),mk(g[a],g[i]))> do
begin
dec(nm);
a:=stack[nm-];
b:=stack[nm];
end;
inc(nm);
stack[nm]:=i;
end;
sum:=;
while nm>= do
begin
a:=stack[nm];
b:=stack[nm-];
sum:=sum+abs(dig(mk(g[],g[b]),mk(g[],g[a])))/;
dec(nm);
end;
writeln(sum::);
end;
end.
SWUST0249 (凸包面积)的更多相关文章
- POJ 3348 - Cows 凸包面积
求凸包面积.求结果后不用加绝对值,这是BBS()排序决定的. //Ps 熟练了template <class T>之后用起来真心方便= = //POJ 3348 //凸包面积 //1A 2 ...
- poj 3348 Cow 凸包面积
Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 8122 Accepted: 3674 Description ...
- poj 3348:Cows(计算几何,求凸包面积)
Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 6199 Accepted: 2822 Description ...
- uva109求凸包面积,判断点是不是在凸包内
自己想了一个方法判断点是不是在凸包内,先求出凸包面积,在求由点与凸包上每两个点之间的面积(点已经排好序了),如果两者相等,则点在凸包内,否则不在(时间复杂度可能有点高)但是这题能过 #include& ...
- poj3348凸包面积
用叉积求凸包面积 如图所示,每次找p[0]来计算,(叉积是以两个向量构成的平行四边形的面积,所以要/2) #include<map> #include<set> #includ ...
- poj 3348(凸包面积)
Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 8063 Accepted: 3651 Description ...
- 【UVA10652】Board Wrapping(求凸包面积)
点此看题面 大致题意: 告诉你若干个矩形的重心坐标.长.宽和相对\(y\)轴的偏转角度,求矩形面积和与能围住这些矩形的最小凸包面积之比. 矩形面积和 这应该是比较好求的吧. 已经给了你长和宽,直接乘起 ...
- poj3348(求凸包面积)
题目链接:https://vjudge.net/problem/POJ-3348 题意:转换题意后即是求凸包的面积. 思路: 套模板,求凸包面积即转换为多个三角形面积之和,用叉积求,然后除2,因为本题 ...
- UESTC 33 Area --凸包面积
题意: 求一条直线分凸包两边的面积. 解法: 因为题意会说一定穿过,那么不会有直线与某条边重合的情况.我们只要找到一个直线分成的凸包即可,另一个的面积等于总面积减去那个的面积. 怎么得到分成的一个凸包 ...
随机推荐
- Objective-C:Category
Category可以在不需要创建子类或是修改原始类的基础上,动态为已经存在的类添加新的行为(方法),,这样可以保证类的原始设计规模较小,功能增加时再逐步扩展:实现了类的相关方法的模块化,把不同的类方法 ...
- ThoughtWorks微服务架构交流心得
ThoughtWorks微服务架构交流心得: (1)<人月神话>中谈到软件开发没有银弹,根源在于软件所解决的领域问题本身固有的复杂性,微服务正是从领域问题角度上进行服务拆分,来降低软件 ...
- mac iterm2快捷键
快捷揵 这大概是item吸引用户的魅力所在了. 1.⌘ +数字在各 tab标签直接来回切换 2.选择即复制 + 鼠标中键粘贴,这个很实用 3.⌘ + f所查找的内容会被自动复制 4.⌘ + d 横着分 ...
- js 数组 转
1.数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限, ...
- 实现js中的重载
重载是面向对象语言里很重要的一个特性,JS中没有真正的重载,是模拟出来的(因为js是基于对象的编程语言,不是纯面向对象的,它没有真正的多态:如继承.重载.重写) 一.什么时候用重载? 举例: func ...
- setsockopt的作用
功能描述: 获取或者设置与某个套接字关联的选 项.选项可能存在于多层协议中,它们总会出现在最上面的套接字层.当操作套接字选项时,选项位于的层和选项的名称必须给出.为了操作套接字层的选项, ...
- CF 241E flights 最短路,重复迭代直到稳定 难度:3
http://codeforces.com/problemset/problem/241/E 首先检测哪些点会出现在从起点到终点的路上,可以用dfs或者迭代, 然后,对于所有的边,设f为边起点,t为边 ...
- 常州培训 day4 解题报告
第一题:(简单的模拟题) 给出一个N位二进制数,有‘+’, ‘-’, ‘*’, ‘/’ 操作,分别表示加1,减1,乘2,除以2,给出M个操作,求出M个操作后的二进制数.N,M<=5000000; ...
- 前端必须掌握30个CSS3选择器
也许你已经学会了CSS的三个简单常用的选择器:#ID,.class,标签选择器,可是这些就足够了吗?随着CSS3的到来,作为前端开发者需要掌握下面三十个基本的选择器,这样才可以在平时开发中得心用手. ...
- php 判断是否 是手机访问
//判断是否属手机 function is_mobile() { $user_agent = $_SERVER['HTTP_USER_AGENT']; $mobile_agents = Array(& ...