#include#includeusing namespace std;
int n,x[10000],y[10000],rx,ry,t,sum;
int main()
sort(y,y+n);
ry=y[n/2];
sort(x,x+n);
for(int i=0;i題意:
給定n個點,將它們移到同一行,使得移動的總次數最小
思路:1.x與y方向的移動互不干擾;
2.將y方向的座標排序,取中位數,那麼一定是移動到這一行
3. x方向排序,則x[i]與移動到相應位置後的點的座標順序相同
令x'[i] = x[i]-i;
則x[i]與x'[i]之間有個一一一對應,且只需把x'[i]移到同乙個位置**化為前述問題)
Poj1723 Soldiers(藍書刷題記錄)
問題描述 給你n個士兵在棋盤裡的座標,要你將他們排成連續的一行 即與x軸平行 問你最少要將這些士兵移動多少步。題解 對於y軸方向上的處理,顯然是排序後找中位數。而x軸方向的因為要相鄰,所以有點麻煩。考慮已排好序的x座標,最終狀態下他們的相對位置已經固定。設最終狀態下的第乙個座標為 x 1 則第乙個點...
poj 1723 SOLDIERS 帶權中位數
帶權中位數型別的題目 可以先考慮降維,最後集合的y座標,明顯是y座標的中位數的位置,容易求出y方向的貢獻res y。比較麻煩的是在x座標上最後是要列成一排,而不是單獨的乙個點,我們可以假設最後集合的最左邊的點是x,採用貪心的策略列出公式 res x sum abs xi x i i belongs ...
分治演算法 士兵排隊(poj1723)
問題描述 在乙個劃分成網格的操場上,n個士兵散亂地站在網格點上。網格點由整數最表 x,y 表示。士兵可以沿著網格邊上 下 左 右移動一步,但在同一時刻乙個網格上只能有一名士兵。按照軍官的命令,士兵們要整齊地列成乙個水平佇列,即排列成 x,y x 1,y x n 1,y 如何選擇x,y的值,才能使士兵...