POJ 1228 —— “穩定”凸包

POJ 1228?Grandpa's Estate

這是個好題目,同時也是個不和諧的題目(不和諧原因是題目出的存在漏洞,數據弱,而且有些條件沒給清楚,為了一個SB錯誤無限WA之后,終于AC)

?

題意就廢了我好長時間,唉……英語不好的鴨梨大……

大意就是爺爺留了塊土地給我,然而這塊土地是以一些釘子來界定的,題目要做的就是給你一堆釘子的坐標(也就是凸包上部分的點),然后問你能不能唯一確定這塊土地。

問了下度娘,這個問題叫做“穩定”凸包問題,那么首先就要了解下“穩定”凸包的性質:(在此感謝XDruid博主)

比方說有4個點:

這4個點可以圍成一個凸包,但是原始的凸包可能并不是這個樣子的

例如可能是這個樣子:

這樣我們則稱這4個點確定的凸包是”不穩定“的!

那么怎么樣才叫穩定呢?

是這個樣子:想一想,若像剛才一樣,在直線外面加一個點,那么線上的點必定不會屬于凸包,要刪掉,是吧?

如此以來,問題就很明確了,算法也隨之而來了:

我們已經知道了怎么求凸包了(前提),這樣一來,只要判斷是否有3點或N>=3點共線就可以了~~

表示用的是Graham的變種Andrew……感覺真的很好用:

下面貼代碼:

View Code
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;const double EPS = 1e-6;struct point{double x , y;
} p[1010] , chn[1010];bool cmp (point a , point b)
{return (a.y < b.y || (a.y == b.y && a.x < b.x));
}double xmult(point p1 , point p2 , point p3)
{return ((p1.x - p3.x) * (p2.y - p3.y) - (p1.y - p3.y) * (p2.x - p3.x));
}int andrew(int n)
{int len , top = 1;chn[0] = p[0];chn[1] = p[1];for (int i = 2 ; i < n ; i ++){while (top && xmult(p[i] , chn[top] , chn[top - 1]) > EPS) top --;chn[++ top] = p[i];}len = top;chn[++ top] = p[n - 2];for (int i = n - 3 ; i >= 0 ; i --){while (top != len && xmult(p[i] , chn[top] , chn[top - 1]) > EPS) top --;chn[++ top] = p[i];}return top;
}bool judge(int n)  //解釋請看下面
{for (int i = 1 ; i < n ; i ++){if ((xmult(chn[i - 1] , chn[i] , chn[i + 1]) != 0) && (xmult(chn[i] , chn[i + 1] , chn[i + 2]) != 0))return false;}return true;
}int main()
{int T , n;scanf("%d" , &T);while (T --){scanf("%d" , &n);for (int i = 0 ; i < n ; i ++) scanf("%lf%lf" , &p[i].x , &p[i].y);if (n < 6) printf("NO\n");else{sort(p , p + n , cmp);int top = andrew(n);if (judge(top)) printf("YES\n");else printf("NO\n");}}return 0;
}

寫了這個題后,對凸包的理解真是加深了。

同時,在被WA了N此后(主要是因為讀入數據要用double。但是題目上說是整點啊!不明白,如果沒看到別人的解題報告,估計要一直WA下去)

昨晚在無限WA后找了XxX師兄,開始以為思路錯了,經過他的問答,對這個題目的理解更是加深了!

下面說下代碼中【judge】函數的判斷原因:

理論支持:叉積 = 0 說明共線!

我們用Andrew算法求出凸包后(棧內不刪去共線的點)這些點已經是按一定順序排好了的~

然后之需要對棧內的點進行叉積判斷就可以了~~ 只有當向左與向中間擴展都不滿足是,才說明當前點不滿足!

所以只要有一個不滿足,則說明全部不滿足了。

?

做了這個題目,我對之前提出的疑問有了答案。哈哈~~

轉載于:https://www.cnblogs.com/hmhard/archive/2013/02/07/2908860.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/260019.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/260019.shtml
英文地址,請注明出處:http://en.pswp.cn/news/260019.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

pythonflaskmock數據_Flask實現簡單Mock Server

Mock Server充當的角色&#xff1a;Mock server在實際項目中的意義就相當于數據庫。將我想要的數據返回給我就行&#xff0c;我并不關心你怎么邏輯處理的。一般的應用程序請求方式是GET和POST。Flask自帶的request使用:request.url獲取當前的請求url全路徑地址&#xff0c;requ…

在Application_Error事件中獲取當前的Action和Control

ASP.NET MVC程序處理異常時&#xff0c;方法有很多&#xff0c;網上也有列舉了6種&#xff0c;下面是使用全局處理在Global.asax文件的Application_Error事件中實現。既然是ASP.NET MVC,我需要捕捉到Controller和Action名稱。怎樣實現可以參考下面代碼&#xff1a; 程序運行結果…

android 真機 sqlite3,在android真機上使用sqlite3

#zijun#2013.10.29#QQ:223663737在android真機上使用sqlite3前期準備:1:保證手機已經ROOT操作步驟:1 : 打開CMD2 : 進入android linuxadb shell3 :切換到root權限su - root4 : 修改system目錄為可讀寫權限mount -oremount,rw -t yaffs2 /dev/block/mtdblock3 /system5 :拷貝文件…

【ORACLE技術嘉年華PPT】MySQL壓力測試經驗

這是2013.11.18在第三屆ORACLE技術嘉年華上的主題演講PPT。點擊這里&#xff1a;本地下載PPT。--------------------------------------分割線--------------------------------------知數堂 &#xff08;http://zhishuedu.com&#xff09;培訓是由資深MySQL專家葉金榮、吳炳錫…

EditText 空指針問題

今天在Android中碰到了這樣一個問題&#xff0c;其實應該很少人會碰到&#xff0c;因為只有像我這種奇葩才會犯這種錯誤。 但既然解決了&#xff0c;我就想在這里跟大家分享一下&#xff0c;畢竟它困擾了我一個白天啊。。。不多說了&#xff0c;看下面。。。 其實問題很簡單&am…

ios跨線程通知_iOS多線程開發(三)---Run Loop(一)

Run LoopRun Loop就是一個事件處理的循環&#xff0c;用來不停的調動工作以及處理輸入事件。使用Run Loop的目的就是節省CPU效率&#xff0c;線程在有工作的時候忙于工作&#xff0c;而沒工作的時候處于休眠狀態。一&#xff0c;Run Loop剖析Structure of a Run Loop and its s…

android播放flv,Android:從url播放flv視頻流

我目前有一個應用程序&#xff0c;它可以記錄視頻并將其上傳到我的服務器。在上傳視頻之后&#xff0c;應用程序會獲得一個響應&#xff0c;該響應包含指向該文件的flv流的URL。Android&#xff1a;從url播放flv視頻流當我嘗試在android默認視頻播放器(視頻)中打開流時什么也沒…

1.關于瀏覽器

一、認識主流瀏覽器 Chrome谷歌瀏覽器Safari蘋果瀏覽器Firefox火狐瀏覽器Opera歐朋瀏覽器 二、瀏覽器內核是什么&#xff1f; 三、五大瀏覽器&#xff0c;四大內核 四、前端做網頁開發用什么瀏覽器&#xff1f; Chrome谷歌瀏覽器。

About me [my way]

就要除夕了。假日的到來&#xff0c;心情瞬間就閑適了下來。早早上了床&#xff0c;看看電腦還有30%的電&#xff0c;想到一些事情&#xff0c;順帶紀錄一下吧。 今年堅持上班到了除夕的前一天&#xff0c;爸媽來工作的城市陪我過年了。感謝他們。前幾天就已經看帖子有說仍在上…

明天要中秋節了,先來到簡單“類”的題目

2-1 Point類的定義 Time Limit: 1000MS Memory limit: 65536K 題目描述 通過本題目的練習可以掌握類與對象的定義&#xff1b; 設計一個點類Time&#xff0c;它具有私有數據成員x(橫坐標)、y(縱坐標)&#xff1b;公有成員函數&#xff1a;SetPoint(int,int)用于設置點對象的值&…

實時數據交換平臺 - BottledWater-pg with confluent

標簽 PostgreSQL , Bottled Water , Kafka , Confluent , IoT 背景 想必大家都在圖書館借過書&#xff0c;小時候有好看的書也會在小伙伴之間傳閱。 借書和數據泵有點類似&#xff0c;一份數據通過數據泵實時的分享給訂閱者。 例如在IoT的場景中&#xff0c;有流式分析的需求&a…

科技鴻蒙系統一千章,第一千六百零七章 鴻蒙紫氣,成圣之機 (上)

文學迷 > 玄幻魔法 > 天命神相 > 第一千六百零七章 鴻蒙紫氣&#xff0c;成圣之機 (上)第一千六百零七章 鴻蒙紫氣&#xff0c;成圣之機功德金身只要達到了八十一重天&#xff0c;大圓滿的境界&#xff0c;實力堪混元大羅級別的圣人&#xff0c;這聽起來確實是一件吊炸…

js reduce實現中間件_js數組高階方法reduce經典用法代碼分享

以下是個人在工作中收藏總結的一些關于javascript數組方法reduce的相關代碼片段&#xff0c;后續遇到其他使用這個函數的場景&#xff0c;將會陸續添加&#xff0c;這里作為備忘。javascript數組那么多方法&#xff0c;為什么我要單挑reduce方法&#xff0c;一個原因是我對這個…

struts2的s:iterator 標簽 詳解

struts2的s&#xff1a;iterator 可以遍歷 數據棧里面的任何數組&#xff0c;集合等等 以下幾個簡單的demo&#xff1a;s:iterator 標簽有3個屬性&#xff1a; value&#xff1a;被迭代的集合 id &#xff1a;指定集合里面的元素的id status 迭代元素的索引1:jsp…

Protocol Buffers的應用

1. Protocol Buffers的介紹 Protocol buffers are Google’s language-neutral, platform-neutral, extensible mechanism for serializing structured data – think XML, but smaller, faster, and simpler. You define how you want your data to be structured once, then …

編程提高:一天一道編程題

1.文本操作 逆轉字符串——輸入一個字符串&#xff0c;將其逆轉并輸出。 拉丁豬文字游戲——這是一個英語語言游戲。基本規則是將一個英語單詞的第一個輔音音素的字母移動到詞尾并且加上后綴-ay&#xff08;譬如“banana”會變成“anana-bay”&#xff09;。可以在維基百科上了…

android自驗簽名證書,沒有以前的互聯網連接,無法驗證Android自簽名證書

使用SSL基礎架構&#xff1a;我們有一個有效的客戶端/服務器設置,其中Android版本4.2和4.4的手機充當客戶端,必須通過其自簽名SSL證書驗證服務器.問題&#xff1a;只要設備在嘗試連接之前至少有一次互聯網訪問權限,服務器證書驗證就會起作用.但是,如果執行恢復出廠設置且設備直…

asp.net緩存(二)

ASP.NET頁面局部緩存 有時緩存整個頁面是不現實的&#xff0c;因為頁的某些部分可能在每次請求時都需要變化。在這些情況下&#xff0c;只能緩存頁的一部分。顧名思義&#xff0c;頁面部分緩存是將頁面部分內容保存在內存中以便響應用戶請求&#xff0c;而頁面其他部分內容則為…

學習C# - Hello,World!

第一天學C#,開始學著寫一些學習筆記&#xff0c;看了一下傳智播客的視頻&#xff0c;按照傳智播客的教學順序&#xff0c;開始學習。 class Program{static void Main(string[] args){Console.WriteLine("Hello World!");//自動添加回車換行Console.Write("Hell…

android獲取button寬度,android – 如何獲得Button的高度和寬度

我創建了一系列按鈕.現在我想找到按鈕的高度和寬度,為此我使用了getWidth()和getHeight().但問題是它總是返回0.為什么會發生這種情況&#xff1f;我發送了我的代碼,請檢查是否有任何問題.int x,y;LinearLayout layoutVertical (LinearLayout) findViewById(R.id.liVLayout);L…