1. 程式人生 > >JZOJ1312.【USACO題庫】5.1.1 Fencing the Cows圈奶牛

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.USACO5.1.1 Fencing the Cows奶牛

problem 題目描述 農夫約翰想要建造一個圍欄用來圍住他的奶牛,可是他資金匱乏。他建造的圍欄必須包括他的奶牛喜歡吃草的所有地點。對於給出的這些地點的座標,計算最短的能夠圍住這些點的圍欄的長度。 PROGRAM NAME: fc INPUT FORMA

USACO3.1.6 Stamps郵票

這一道題,算是我“千辛萬苦”才做出來的吧。因為,我在時超70後代寫了很久,才找出了一個能對但又不超時的方法。 下邊,來說一說我的超時思想: 用i來列舉,從1一直到2000000,在一個個判斷,知道i不可以結合出來就輸出並結束程式,(呵呵,不超時的話,那就是相當於中了2億元的大獎了) 好了看一

USACO3.1.4 Shaping Regions形成的區域

題目描述 N個不同的顏色的不透明的長方形(1 <= N <= 1000)被放置在一張寬為A長為B的白紙上。 這些長方形被放置時,保證了它們的邊於白紙的邊緣平行。 所有的長方形都放置在白紙內

USACO3.2.2 Stringsobits__01串

【題目】 考慮排好序的N(N<=31)位二進位制數。 你會發現,這很有趣。因為他們是排列好的,而且包含所有可能的長度為N且含有1的個數小於等於L(L<=N)的數。 你的任務是輸出第I(1<=I<=長度為N的二進位制數的個數)大的,長度為N,且含有1的個數小於等於L的那

USACO3.2.6 Sweet Butter香甜的黃油

這一題,我本來是想用spfa演算法的,但後來嫌太累了,就打了個習以為常的floyd演算法。 floyd演算法很簡單——三重迴圈。。。 for (k=1;i<=p;i++) for (i=1;j<=p;j++) for (j=i

USACO 動態規劃 彙總

資料結構能打到省選了=-= 但是其他類問題只能打到普及 普及啊啊啊!!! 而且這邊省選組都是什麼仙人掌啊,什麼系什麼點對啊...感覺資料結構並沒有什麼用 (實際上很有用但我不會運用) 然後頹到提高組來了..結果全是模擬還有一堆沒學的其他玩意 (迴文自動機) 資料結構也沒

JZOJ1274.USACO2.4.4 Bessie Come Home回家

題目描述 現在是晚餐時間,而母牛們在外面分散的牧場中。 農民約翰按響了電鈴,所以她們開始向穀倉走去。 你的工作是要指出哪隻母牛會最先到達穀倉(在給出的測試資料中,總會有且只有一隻速度最快的母牛)。 在擠奶的時候(晚餐前),每隻母牛都在她自己的牧場上,一些

一大堆的福利之USACO Mixing Milk混合牛奶

題目描述 牛奶包裝是一個如此低利潤的生意,所以儘可能低的控制初級產品(牛奶)的價格變的十分重要。 請幫助快樂的牛奶製造者(Merry Milk Makers)以可能的最廉價的方式取得他們所需的牛

一大堆的福利之USACOThe 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

洛谷P3930SAC 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認證12cCUUG 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