Poj1723 Soldiers(藍書刷題記錄)

2021-09-11 22:23:11 字數 719 閱讀 1210

問題描述:給你n個士兵在棋盤裡的座標,要你將他們排成連續的一行(即與x軸平行),問你最少要將這些士兵移動多少步。

題解:對於y軸方向上的處理,顯然是排序後找中位數。而x軸方向的因為要相鄰,所以有點麻煩。考慮已排好序的x座標,最終狀態下他們的相對位置已經固定。

設最終狀態下的第乙個座標為 x+1

則第乙個點的最終座標為x+1 從x[1]---->x+1

第二個點的最終座標為x+1 從x[2]---->x+2

第三個點為最終座標為x+2 從x[3]---->x+3

第四個點為最終座標為x+3 從x[4]---->x+4

第五個點為最終座標為x+4 從x[5]---->x+5

…x[1] - 1---->x

x[2] - 2---->x

x[3] - 3---->x

x[4] - 4---->x

x[5] - 5---->x

問題轉化為找到乙個x 使得 移動最小 和y 軸的處理方式一樣了。

#include

using namespace std;

const

int maxn=

100000

;int x[maxn]

,y[maxn]

,n;int

main()

cout<}

poj 1723Soldiers 帶全中位數

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個點,將它們移到同一行,使得移動的總次數最小...

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的值,才能使士兵...