巨人和鬼
一組n個巨人正與n個鬼進行戰鬥,每個巨人的**是乙個質子炮, 它可以把一串質子流射中鬼而把鬼消滅。質子流沿直線行進,在擊中鬼時就終止。巨人決定採取下述策略。他們尋找鬼配對,以形成n個巨人─鬼對,。然後每個巨人同時向他選取的鬼射出一串質子流。我們知道,讓質子流互相交叉是很危險的。因此巨人選擇的配對方式應該使質子流都不會交叉。假定每個巨人和每個鬼的位置都是平面上的乙個固定點,並且沒有三個位置共線, 求一種配對方案。
解題思路:由題意知,其必存在乙個解,這裡利用分治的思想,利用一條線,把原區域分為兩個區域,然後對這兩個區域遞迴求解。
分割思路:
1.先找左下角節點
2.把其餘點按其與左下角節點角度大小排序
3.從小到大遍歷,當一邊的巨人與鬼的數量相同時(這裡利用正負1相加為0判斷),儲存答案,遞迴求解
分割圖如下:
用p1 –p6分割
//只有當c1與c2的數量相等且基點與當前點標識不同時才能配對
ans[ji.biao]
= p[k]
.biao;
go(l +
1, k -1)
;//左半部分
go(k +
1, r)
;//右半部份
}int
main
(void)go
(1, n)
;for
(int i =
1; i <= n; i++
) cout << ans[i]
<<
" ";
}system
("pause");
}原
凸包問題擴充套件 巨人和鬼 分治 遞迴
巨人和鬼 一組n個巨人正與n個鬼進行戰鬥,每個巨人的 是乙個質子炮,它可以把一串質子流射中鬼而把鬼消滅。質子流沿直線行進,在擊中鬼時就終止。巨人決定採取下述策略。他們尋找鬼配對,以形成n個巨人 鬼對,然後每個巨人同時向他選取的鬼射出一串質子流。我們知道,讓質子流互相交叉是很危險的。因此巨人選擇的配對...
UVA1411 Ants 巨人與鬼
uva1411 ants 巨人與鬼 題沒輸出玩,再來一張 翻譯成中文就是 思路 考慮到這道題比較難,就上個思路吧 分治 下面展示一些內聯 片。include include include include include using namespace std const int maxn 505 ...
演算法競賽入門經典 高效演算法 巨人與鬼
巨人與鬼 題目 2 0 0 1 2 2 1 1 4 樣例輸出 有可能有多種匹配方案,只要符合要求即可 0 2 1 3 這一題書上說是分治 遞迴,但是筆者剛開始只是當成數理題做,並沒有意識到其分治的思想,下面的 也是按照筆者最開始的數理方法寫的,分治思想的 之後再補上。1 首先,要如何想到這種極座標的...