在某塊平面土地上有n個點,你可以選擇其中的任意四個點,將這片土地圍起來,當然,你希望這四個點圍成的多邊形面積最大。
輸入格式:
第1行乙個正整數n,接下來n行,每行2個數x,y,表示該點的橫座標和縱座標。
輸出格式:
最大的多邊形面積,答案精確到小數點後3位。
輸入樣例#1:
5輸出樣例#1:0 01 0
1 10 1
0.5 0.5
1.000資料範圍\(n\le 2000\),\(|x|,|y|\le 100000\)。
首先想到的當然是\(n^4\)大力列舉所有點,20分。
考慮優化,發現我們可以列舉一條邊,再以該邊為對角線求出左右兩邊的三角形最大值(我的方法是用叉積求出有向面積,找出最大值與最小值,減一下即可)30分。
考慮繼續優化,我們發現四邊形的四個頂點一定在凸包上,所以求先求凸包再列舉,50分。
五十分核心**大致如下:
tubao();
double ans = 0.;
for(int i = 1; i <= m; ++i)
if(minn < 0. && maxx > 0.)
ans = max(maxx - minn, ans); }}
printf("%.3f", ans / 2.);
我們又能發現對於一條邊,如果它在凸包上且作為對角線,我們發現凸包上的一側的點到該線段的距離是乙個凸函式,所以我們考慮三分,複雜度\(o(n^2\log n)\),聽說卡一下常能過。
綜上,我們發現我們整理已經整理出了一些性質,雖然都非常顯而易見,但我們還沒有把它們結合起來。
首先,凸包是肯定要求的。
受到之前的啟發,我們仍然考慮列舉一條對角線,設現在列舉到的頂點為\(i, j\)。
設另兩個點為\(a, b\)。我們先來看\(b\)。
首先,我們不難得出如果確定\(i,j\),那\(b\)到\(ij\)的距離一定是單峰的。那如果\(j\)開始逆時針轉動,峰顯然也會逆時針轉動(可以想象是整個凸包轉過來了)。
於是我們讓\(b\)逆時針跑就行了。
那\(a\)也同理。
我們發現\(b\)對每個點只掃了一遍,對於每個\(i\)複雜度\(o(n)\),同理\(j,b\)都是,所以總複雜度\(o(n^2)\)。
核心**如下:
tubao();
double ans = 0.;
for(int i = 1; i <= m; ++i)
}printf("%.3f", ans / 2.);
模擬 2018 9洛谷月賽T2
傳送門 一道模擬題?根據給出的條件可以分類討論列出關於k的不等式,然後求區間的交 但是求交不好求,可以轉化成求補集的並,還是挺常見的套路 具體實現還是很有技巧的,可以用結構體存這個點和它的型別 左端點or右端點 然後通過排序求並,具體細節看注釋 include include include inc...
20161005 NOIP 模擬賽 T2 解題報告
beautiful 2.1 題目描述 乙個長度為 n 的序列,對於每個位置 i 的數 ai 都有乙個優美值,其定義是 找到序列中最 長的一段 l,r 滿足 l i r,且 l,r 中位數為 ai 我們比較序列中兩個位置的數的大小時,以數值為第一關鍵字,下標為第二關鍵字比較。這樣的話 l,r 的長度只...
20161003 NOIP 模擬賽 T2 解題報告
weed duyege的電腦上面已經長草了,經過辨認上面有金坷垃的痕跡。為了查出真相,duyege 準備修好電腦之後再進行一次金坷垃的模擬實驗。電腦上面有若干層金坷垃,每次只能在上面撒上一層高度為 vi 的金坷垃,或者除掉最 新 vi 層 不是量 撒的金坷垃。如果上面只留有不足 vi 層金坷垃,那麼...