poj 1723 SOLDIERS 帶權中位數

2022-05-05 02:36:08 字數 674 閱讀 8060

帶權中位數型別的題目~

可以先考慮降維,最後集合的y座標,明顯是y座標的中位數的位置,容易求出y方向的貢獻res_y。比較麻煩的是在x座標上最後是要列成一排,而不是單獨的乙個點,我們可以假設最後集合的最左邊的點是x,採用貪心的策略列出公式:res_x=sum(abs(xi-x-i))(i belongs to [0,n-1])。令zi=xi-i,就轉化為res_x=sum(abs(zi-x)),這相當於求zi數列的中位數(因為我們沒有把重疊的點合併,所以不是帶權了,直接求中位數就好,一樣的意思)。

#include#include#includeusing namespace std;

const int maxn=10010;

pairpt[maxn];

bool cmp(const pair& a,const pair& b)

int n;

int main()

sort(pt,pt+n,cmp);

int res=0;

for(int i=0;isort(pt,pt+n);

for(int i=0;isort(pt,pt+n);

for(int i=0;iprintf("%d\n",res);

}return 0;

}

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

Poj1723 Soldiers(藍書刷題記錄)

問題描述 給你n個士兵在棋盤裡的座標,要你將他們排成連續的一行 即與x軸平行 問你最少要將這些士兵移動多少步。題解 對於y軸方向上的處理,顯然是排序後找中位數。而x軸方向的因為要相鄰,所以有點麻煩。考慮已排好序的x座標,最終狀態下他們的相對位置已經固定。設最終狀態下的第乙個座標為 x 1 則第乙個點...

分治演算法 士兵排隊(poj1723)

問題描述 在乙個劃分成網格的操場上,n個士兵散亂地站在網格點上。網格點由整數最表 x,y 表示。士兵可以沿著網格邊上 下 左 右移動一步,但在同一時刻乙個網格上只能有一名士兵。按照軍官的命令,士兵們要整齊地列成乙個水平佇列,即排列成 x,y x 1,y x n 1,y 如何選擇x,y的值,才能使士兵...