JZOJ1312.【USACO題庫】5.1.1 Fencing the Cows圈奶牛
problem
題目描述
農夫約翰想要建造一個圍欄用來圍住他的奶牛,可是他資金匱乏。他建造的圍欄必須包括他的奶牛喜歡吃草的所有地點。對於給出的這些地點的座標,計算最短的能夠圍住這些點的圍欄的長度。
PROGRAM NAME: fc
INPUT FORMAT
輸入資料的第一行包括一個整數 N。N(0 <= N <= 10,000)表示農夫約翰想要圍住的放牧點的數目。接下來 N 行,每行由兩個實陣列成,Xi 和 Yi,對應平面上的放牧點座標(-1,000,000 <= Xi,Yi <= 1,000,000)。數字用小數表示。
SAMPLE INPUT (file fc.in)
4
4 8
4 12
5 9.3
7 8
OUTPUT FORMAT
輸出必須包括一個實數,表示必須的圍欄的長度。答案保留兩位小數。
SAMPLE OUTPUT (file fc.out)
12.00
輸入
輸出
樣例輸入
樣例輸出
資料範圍限制
analysis
由於本人心血來潮我重新寫了另一篇排版更好看更好懂的凸包blog
好,看完了嗎?理解了嗎?
所以,這道題完全就是一道凸包裸題
我們用graham把凸包上的點全部求出,再計算凸包中兩兩相鄰的點的距離和就可以了
code
新學的OIers建議別直接看程式碼,還是儘量手擼,自己理解理解
type
point=record
x,y:extended;
end;
var
f:array[0..10000]of point;
angle:array[0..10000]of
record
x,y,value,dis:extended;
end;//x,y座標,value角度,dis與原點距離
stack:array[0..10000]of longint;
row,rank:extended;
n,i,j,tot,up:longint;
ans:extended;
function judge(ax,ay,bx,by,cx,cy:extended):extended;
begin//判斷點是否在直線左側
exit(ax*by+cx*ay+bx*cy-cx*by-bx*ay-ax*cy);
end;
function arccot(xx,yy:extended):extended;
begin//返回一個點連原點與x軸正半軸的夾角
if yy=0 then exit(0);
if xx=0 then exit(90);
arccot:=arctan(yy/xx)*180/pi;//計算幾何,這裡用pascal自帶的三角函式arctan
if xx<0 then arccot:=arccot+180;
end;
procedure qsort(l,r:longint);
var//快排,不解釋
i,j:longint;
mid,mid1:extended;
begin
i:=l;
j:=r;
mid:=angle[(l+r)shr 1].value;
mid1:=angle[(l+r)shr 1].dis;
repeat
while (angle[i].value<mid)or(angle[i].value=mid)and(angle[i].dis<mid1)do inc(i);
while (angle[j].value>mid)or(angle[j].value=mid)and(angle[j].dis>mid1)do dec(j);
if i<=j then
begin
angle[0]:=angle[i];
angle[i]:=angle[j];
angle[j]:=angle[0];
inc(i);
dec(j);
end;
until i>j;
if l<j then qsort(l,j);
if i<r then qsort(i,r);
end;
begin
readln(n);
rank:=maxlongint;
for i:=1 to n do
with f[i] do
begin
readln(x,y);
if y<rank then
begin
row:=x;
rank:=y;
end;//記錄最底下的點的行列值
end;
for i:=1 to n do
with f[i] do
begin
x:=x-row;
y:=y-rank;
end;//把所有點平移一下,使沒有點會在三四象限內
tot:=1;
for i:=1 to n do
with f[i] do
if (x<>0)or(y<>0) then
begin
inc(tot);
angle[tot].value:=arccot(x,y);
angle[tot].x:=x;
angle[tot].y:=y;
angle[tot].dis:=sqrt(x*x+y*y);
end;
qsort(2,n);//按角度為第一關鍵字、距離為第二關鍵字排序
up:=2;
stack[1]:=1;
stack[2]:=2;
for i:=3 to n do
begin
while judge(angle[stack[up-1]].x,angle[stack[up-1]].y,angle[stack[up]].x,angle[stack[up]].y,angle[i].x,angle[i].y)<0 do dec(up);//判斷當前點是否滿足要求
inc(up);
stack[up]:=i;//入棧
end;
ans:=0;
stack[up+1]:=stack[1];
for i:=1 to up do
ans:=ans+sqrt(sqr(angle[stack[i]].x-angle[stack[i+1]].x)+sqr(angle[stack[i]].y-angle[stack[i+1]].y));
writeln(ans:0:2);//統計凸包上兩兩相鄰的點的距離,輸出
end.
相關推薦
JZOJ1312.【USACO題庫】5.1.1 Fencing the Cows圈奶牛
problem 題目描述 農夫約翰想要建造一個圍欄用來圍住他的奶牛,可是他資金匱乏。他建造的圍欄必須包括他的奶牛喜歡吃草的所有地點。對於給出的這些地點的座標,計算最短的能夠圍住這些點的圍欄的長度。 PROGRAM NAME: fc INPUT FORMA
【USACO題庫】3.1.6 Stamps郵票
這一道題,算是我“千辛萬苦”才做出來的吧。因為,我在時超70後代寫了很久,才找出了一個能對但又不超時的方法。 下邊,來說一說我的超時思想: 用i來列舉,從1一直到2000000,在一個個判斷,知道i不可以結合出來就輸出並結束程式,(呵呵,不超時的話,那就是相當於中了2億元的大獎了) 好了看一
【USACO題庫】3.1.4 Shaping Regions形成的區域
題目描述 N個不同的顏色的不透明的長方形(1 <= N <= 1000)被放置在一張寬為A長為B的白紙上。 這些長方形被放置時,保證了它們的邊於白紙的邊緣平行。 所有的長方形都放置在白紙內
【USACO題庫】3.2.2 Stringsobits__01串
【題目】 考慮排好序的N(N<=31)位二進位制數。 你會發現,這很有趣。因為他們是排列好的,而且包含所有可能的長度為N且含有1的個數小於等於L(L<=N)的數。 你的任務是輸出第I(1<=I<=長度為N的二進位制數的個數)大的,長度為N,且含有1的個數小於等於L的那
【USACO題庫】3.2.6 Sweet Butter香甜的黃油
這一題,我本來是想用spfa演算法的,但後來嫌太累了,就打了個習以為常的floyd演算法。 floyd演算法很簡單——三重迴圈。。。 for (k=1;i<=p;i++) for (i=1;j<=p;j++) for (j=i
【USACO題庫】 動態規劃 彙總
資料結構能打到省選了=-= 但是其他類問題只能打到普及 普及啊啊啊!!! 而且這邊省選組都是什麼仙人掌啊,什麼系什麼點對啊...感覺資料結構並沒有什麼用 (實際上很有用但我不會運用) 然後頹到提高組來了..結果全是模擬還有一堆沒學的其他玩意 (迴文自動機) 資料結構也沒
JZOJ1274.【USACO題庫】2.4.4 Bessie Come Home回家
題目描述 現在是晚餐時間,而母牛們在外面分散的牧場中。 農民約翰按響了電鈴,所以她們開始向穀倉走去。 你的工作是要指出哪隻母牛會最先到達穀倉(在給出的測試資料中,總會有且只有一隻速度最快的母牛)。 在擠奶的時候(晚餐前),每隻母牛都在她自己的牧場上,一些
一大堆的福利之【USACO題庫】 Mixing Milk混合牛奶
題目描述 牛奶包裝是一個如此低利潤的生意,所以儘可能低的控制初級產品(牛奶)的價格變的十分重要。 請幫助快樂的牛奶製造者(Merry Milk Makers)以可能的最廉價的方式取得他們所需的牛
一大堆的福利之【USACO題庫】The Clocks
考慮將如此安排在一個 3 x3 行列中的九個時鐘: |-------| |-------| |-------| | | | | | | | |---O | |---O | | O | | | |
【OCP題庫】最新CUUG OCP 12c 071考試題庫(67題)
ctu ans The evaluate edi cit edit where which 67、(25-8)choose the best answer: View the Exhibit and examine the structure of CUSTOMERS ta
【OCP題庫】最新CUUG OCP 12c 071考試題庫(65題)
answer oos choose pla limit tasks sel task 不能 65、(22-16) choose the best answer: The CUSTOMERS table has the following structure: You nee
【OCP題庫】最新CUUG OCP 12c 071考試題庫(68題)
數據 ted name 性能視圖 statement 不能訪問 inf dynamic acc 68、(29-13)choose two: Which two statements are true? (Choose two.) A) DICTIONARY is a vie
【OCP新題庫】052最新題庫解析-第5題
recovery start esp val star ace time take swe 5、Which two affect the time taken for instance recovery? A) size of redo logs B) size of UN
【洛谷P3930】SAC E#1 - 一道大水題 Knight
輸入 告訴 com space count es2017 所在 false .... 題目背景 毒奶色和F91是好朋友。 題目描述 他們經常在一起玩一個遊戲,不,不是星際爭霸,是國際象棋。 毒奶色覺得F91是一只雞。他在一個n×n的棋盤上用黑色的城堡(車)、騎士(馬)、主教
【OCP新題庫】052最新題庫解析-第6題
ask answer ast eat with oui sys man nag 6、You are installing Oracle Grid Infrastructure by using the Oracle Universal Installer (OUI). Yo
【ocp新題庫】052最新考題收集整理-第7題
The support performed dml orm extern art alloc sed 7、Which is true about external tables? A) The ORACLE_DATAPUMP access driver can be use
【數據庫】- 一個值只有0和1的字段,到底要不要建索引?
什麽 是你 美國 www 依次 https 數據庫索引 查詢 .html 關於數據庫索引的所有文章,都會告訴你不要對這種字段建索引。 但這些文章不會告訴你的一個事實是: 如果表裏面這個字段的值分布極度不均勻的情況下,而且你需要查詢分布較少的記錄的話,索引就非常有用了
LibEvent中文幫助文件--第5章【設定LibEvent庫】
LiEvent中文幫助文件--第5章【設定LibEvent庫】 返回主目錄 Libevent 快速可移植非阻塞式網路程式設計 修訂歷史 版本 日期 作者 備註 V1.0 2016-11-15 周勇 Libeve
【機器學習實戰】5.Logistic迴歸(1)
程式:# -*- coding: utf-8 -*- """ Created on Wed Mar 14 14:15:43 2018 @author: ### """ import numpy as np import matplotlib.pyplot as plt d
【OCP認證12c題庫】CUUG 071題庫考試原題及答案(26)
byte digi form cuug ocp stat can har for each 26.choose two Examine the structure of the PRODUCTS table. Which two statements are true? A