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 --凸包面积
题意: 求一条直线分凸包两边的面积. 解法: 因为题意会说一定穿过,那么不会有直线与某条边重合的情况.我们只要找到一个直线分成的凸包即可,另一个的面积等于总面积减去那个的面积. 怎么得到分成的一个凸包 ...
随机推荐
- python 循环设计
for循环 1.range()用法 for循环后的in跟随一个序列的画,循环每次使用的序列元素而不是序列的下标 例:s='abcdefg' for i in range(0,len(s),3): pr ...
- WebDataTree 使用XML做数据源绑定数据
英文版原文链接:http://www.infragistics.com/help/topic/e5f07b51-ee2d-4a33-aaac-2f43cffff327 所使用的控件版本为:Infrag ...
- matlab(函数,变量)
- LaTeX测试
首先输出个\(\LaTeX\ \),看上去非常高端! 然后上论文,测试以后发现不行QAQQQ 貌似只能插入一个公式来着...比如:$\theta(\vec{u},\ \vec{v}) = arccos ...
- 编程思考 PetShop读后感
标准,插拔式的设计思想建立一致的标准是通向“复用”的通道.分层,使其得到的充分的独立.一个东西如果独立了[不是孤立],这个事物就具有很强大的力量,这个和一个人的成长是相同的道理.所以呢,在写程序的过程 ...
- js控制html文字提示语的出现和隐藏
有时我们需要在点击html输入框的时候,旁边会出现提示语.在输入字符的时候,输入框下边会出现输入了多少字符的提示. 请看下面实例. <!DOCTYPE html> <html> ...
- java反射之Constructor简单应用
Constructor类是java反射中重要的类,它是对类中构造器的描述的类.类似于Method(对类中方法的描述的类),Field(对类中属性的描述的类). 通过创建Constructor的对象实例 ...
- 用for循环打印菱形
package nothh; public class mmm { public static void main(String[] args) { //for循环内的 for按顺序运算,先打印1/4 ...
- 用while循环语句计算1!+2!+……20!之和
package nothh; public class mmm { public static void main(String[] args) { // TODO Auto-generated me ...
- Deep Learning 初识
实际生活中,人们为了解决一个问题,如对象的分类(对象可是是文档.图像等),首先必须做的事情是如何来表达一个对象,即必须抽取一些特征来表示一个对象,如文本的处理中,常常用词**来表示一个文档,或把文档表 ...