日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

牛客假日团队赛5J护城河 bzoj 1670: [Usaco2006 Oct]Building the Moat护城河的挖掘 (凸包的周长)...

發布時間:2023/12/18 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 牛客假日团队赛5J护城河 bzoj 1670: [Usaco2006 Oct]Building the Moat护城河的挖掘 (凸包的周长)... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

鏈接:https://ac.nowcoder.com/acm/contest/984/J
來源:牛客網

護城河
時間限制:C/C++ 1秒,其他語言2秒
空間限制:C/C++ 32768K,其他語言65536K
64bit IO Format: %lld
題目描述
為了防止口渴的食蟻獸進入他的農場,Farmer John決定在他的農場周圍挖一條護城河。農場里一共有N(8<=N<=5,000)股泉水,并且,護城河總是筆直地連接在河道上的相鄰的兩股泉水。護城河必須能保護所有的泉水,也就是說,能包圍所有的泉水。泉水一定在護城河的內部,或者恰好在河道上。當然,護城河構成一個封閉的環。
挖護城河是一項昂貴的工程,于是,節約的FJ希望護城河的總長度盡量小。請你寫個程序計算一下,在滿足需求的條件下,護城河的總長最小是多少。
所有泉水的坐標都在范圍為(1..10,000,000,1..10,000,000)的整點上,一股泉水對應著一個唯一確定的坐標。并且,任意三股泉水都不在一條直線上。
以下是一幅包含20股泉水的地圖,泉水用""表示:
...-----------------......
../.......................
./.........................
.........................
|........................
|.........................
|..........................
..........................|
.*........................|
.........................|
........................|
.........................
......................./.
......................../..
.......----------------...
(請復制到記事本中用等寬字體查看)
圖中的直線,為護城河的最優挖掘方案,即能圍住所有泉水的最短路線。
路線從左上角起,經過泉水的坐標依次是:(18,0),(6,-6),(0,-5),(-3,-3),(-17,0),(-7,7),(0,4),(3,3)。繞行一周的路徑總長為70.8700576850888(...)。答案只需要保留兩位小數,于是輸出是70.87。
輸入描述:
第1行: 一個整數,N
第2..N+1行: 每行包含2個用空格隔開的整數,x[i]和y[i],即第i股泉水的位置坐標
輸出描述:
第1行: 輸出一個數字,表示滿足條件的護城河的最短長度。保留兩位小數
示例1
輸入
復制
20
2 10
3 7
22 15
12 11
20 3
28 9
1 12
9 3
14 14
25 6
8 1
25 1
28 4
24 12
4 15
13 5
26 5
21 11
24 4
1 8
輸出
復制
70.87

思路:
模板題,直接看代碼吧。

細節見代碼:

#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <queue> #include <stack> #include <map> #include <set> #include <vector> #include <iomanip> #define ALL(x) (x).begin(), (x).end() #define rt return #define dll(x) scanf("%I64d",&x) #define xll(x) printf("%I64d\n",x) #define sz(a) int(a.size()) #define all(a) a.begin(), a.end() #define rep(i,x,n) for(int i=x;i<n;i++) #define repd(i,x,n) for(int i=x;i<=n;i++) #define pii pair<int,int> #define pll pair<long long ,long long> #define gbtb ios::sync_with_stdio(false),cin.tie(0),cout.tie(0) #define MS0(X) memset((X), 0, sizeof((X))) #define MSC0(X) memset((X), '\0', sizeof((X))) #define pb push_back #define mp make_pair #define fi first #define se second #define eps 1e-6 #define gg(x) getInt(&x) #define chu(x) cout<<"["<<#x<<" "<<(x)<<"]"<<endl using namespace std; typedef long long ll; ll gcd(ll a, ll b) {return b ? gcd(b, a % b) : a;} ll lcm(ll a, ll b) {return a / gcd(a, b) * b;} ll powmod(ll a, ll b, ll MOD) {ll ans = 1; while (b) {if (b % 2)ans = ans * a % MOD; a = a * a % MOD; b /= 2;} return ans;} inline void getInt(int* p); const int maxn = 1000010; const int inf = 0x3f3f3f3f; /*** TEMPLATE CODE * * STARTS HERE ***/const int MAX=5005;// 最大點數 const int INF=0x3f3f3f3f;//坐標的最大值 // 本模板讀入默認是1-n讀入 int n; int top; struct Node {int x,y; }p[MAX],S[MAX];//p儲存節點的位置,S是凸包的棧 inline bool cmp(Node a,Node b)//比較函數,對點的極角進行排序 {double A=atan2((a.y-p[1].y),(a.x-p[1].x));double B=atan2((b.y-p[1].y),(b.x-p[1].x));if(A!=B)return A<B;else return a.x<b.x; //這里注意一下,如果極角相同,優先放x坐標更小的點 } long long Cross(Node a,Node b,Node c)//計算叉積 {return 1LL*(b.x-a.x)*(c.y-a.y)-1LL*(b.y-a.y)*(c.x-a.x); } void Get()//求出凸包 {p[0]=(Node){INF,INF};int k;for(int i=1;i<=n;++i)//找到最靠近左下的點if(p[0].y>p[i].y||(p[0].y==p[i].y&&p[i].x<p[0].x)){p[0]=p[i];k=i;}swap(p[k],p[1]);sort(&p[2],&p[n+1],cmp);//對于剩余點按照極角進行排序S[0]=p[1],S[1]=p[2];top=1;//提前在棧中放入節點for(int i=3;i<=n;)//枚舉其他節點{if(top&&Cross(S[top-1],p[i],S[top])>=0)top--;//如果當前棧頂不是凸包上的節點則彈出else S[++top]=p[i++];//加入凸包的棧中}//底下這個玩意用來輸出凸包上點的坐標//for(int i=0;i<=top;++i)// printf("(%d,%d)\n",S[i].x,S[i].y); } double getdis(Node one ,Node two) {double res=sqrt((one.x-two.x)*(one.x-two.x)+(two.y-one.y)*(two.y-one.y));return res;} double solve()// 返回凸包的邊長 ___注意n=1,n=2時候的特判 {double ans=0.00000000000000;ans=ans+getdis(S[0],S[top]);repd(i,1,top){ans=ans+getdis(S[i],S[i-1]);}return ans; }int main() {//freopen("D:\\code\\text\\input.txt","r",stdin);//freopen("D:\\code\\text\\output.txt","w",stdout);gbtb;cin>>n;repd(i,1,n){cin>>p[i].x>>p[i].y;}Get();cout<<fixed<<setprecision(2)<<solve()<<endl;return 0; }inline void getInt(int* p) {char ch;do {ch = getchar();} while (ch == ' ' || ch == '\n');if (ch == '-') {*p = -(getchar() - '0');while ((ch = getchar()) >= '0' && ch <= '9') {*p = *p * 10 - ch + '0';}}else {*p = ch - '0';while ((ch = getchar()) >= '0' && ch <= '9') {*p = *p * 10 + ch - '0';}} }

轉載于:https://www.cnblogs.com/qieqiemin/p/11284425.html

總結

以上是生活随笔為你收集整理的牛客假日团队赛5J护城河 bzoj 1670: [Usaco2006 Oct]Building the Moat护城河的挖掘 (凸包的周长)...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: www.国产黄色| 天堂中文在线观看 | 日韩av线上 | 久久国产一| www.99爱 | 无码国模国产在线观看 | 日本十八禁视频无遮挡 | 欧美日韩黄色一区二区 | 新91视频在线观看 | 一本av在线 | 久久97精品 | 超碰在 | 亚洲一区影视 | www.国产区 | 国产免费无码一区二区 | jizzjizz在线观看 | 国产喷白浆一区二区三区 | 亚洲2022国产成人精品无码区 | 天天操天天拍 | xxxx黄色| av制服丝袜在线 | 欧美一区二区三区粗大 | 性高潮久久久久久 | 国产精彩视频一区 | 中文字幕免费播放 | n0659极腔濑亚美莉在线播放播放 | 在线看三级 | 夜夜免费视频 | 在线看av网址 | 伊人色av | 羞辱狗奴的句子有哪些 | 中文综合网 | 天天草天天干 | 毛片视频免费观看 | 国产成人无码精品久久久久 | 草草影院网址 | 中文字幕在线观看网址 | 免费观看的av网站 | 欧美日韩a级 | 欧美性网址 | 亚洲av无码国产综合专区 | 91免费污视频 | 国产免费成人在线视频 | 国产二区视频在线观看 | 最近免费中文字幕 | 高清无码一区二区在线观看吞精 | 亚洲欧美精品aaaaaa片 | 成人亚洲一区二区 | 久久情趣视频 | 色人阁婷婷 | 欧美日韩中文 | 91性高潮久久久久久久久 | 欧美一性一乱一交一视频 | 日本特黄一级片 | 国产一二三在线 | 日本黄色免费看 | 天天爽夜夜爽夜夜爽精品视频 | av福利在线 | 日日躁夜夜躁白天躁晚上躁91 | 欧美一区二区三区黄片 | 国精产品一区二区 | 久久加久久| 欧美日韩精品久久 | 伊人资源 | 亚洲精品一区二区三区婷婷月 | 影音先锋日韩资源 | 福利免费在线观看 | 亚洲精品视频三区 | 欧美激情免费观看 | 日韩1区2区3区 | 欧美日韩综合网 | 欧美一级录像 | 四虎影城库| 一区二区三区四区免费 | 嫩草视频在线观看免费 | 亚洲插插| 无码精品一区二区三区AV | 波多野结衣在线看 | 日本大尺度电影免费观看全集中文版 | 免费精品视频 | 免费黄色网址观看 | 国产毛片久久久久 | 国产成人三级在线观看视频 | 少妇高潮一区二区三区99 | 日韩精品高清在线 | 美女大黄网站 | 亚洲大片免费看 | 国产日韩欧美在线 | 经典三级在线视频 | 成在人线av | 福利视频二区 | 国产亚洲女人久久久久毛片 | 欧美精品成人一区二区在线观看 | 狠狠干狠狠撸 | 无码少妇精品一区二区免费动态 | 久久噜噜噜精品国产亚洲综合 | 奇米色777| 国产一二三区在线 | 老鸭窝视频在线观看 |