主要是51nod上的中位數(距離之和最小):
一:1096 距離之和最小:
是一道水題;
#include#include1096 距離之和最小#include
using
std::sort;
int map[10010
];int
main()
printf(
"%lld
",ans);
return0;
}
二:1108 距離之和最小 v2
主體上與上題一樣,只是分成三維(tx,ty,tz);
#include#include1108 距離之和最小 v2#include
using
std::sort;
struct
node
map[
10010
];bool cmpx(node a,node b)
bool cmpy(node a,node b)
bool cmpz(node a,node b)
int abs(int x)
intmain()
printf(
"%lld
",ans);
return0;
}
三:1110 距離之和最小 v3
將一變得複雜(類似01揹包與完全揹包),將每個價值pi的點變成pi個點,那後與一相同(加上簡單處理);
#include#include1110 距離之和最小 v3#include
using
std::sort;
struct
node
map[
10010
];bool cmp(node a,node b)
long
long abs(long
long x)
intmain()
}//printf("std:: %d %d %d %d ",sum,t,tx,tzi);
long
long ans=0
;
for(int i=1;i<=n;i++)
ans=ans+(abs(tx-map[i].x)*map[i].p);
printf(
"%lld
",ans);
return0;
}
總結:中位數應作為一種思維;
求中位數總結
今天在某個群中看到有人問在流式的資料中如何動態的維護中位數的方法,因為之前看到同學的乙個問題,當時他沒答出來。但是後來了解到類似top k last k 需要用到最大堆,最小堆一樣,中位數需要利用雙堆維護一下。先複習一下,如果是靜態的資料求取中位數的方法有哪些呢?1 排序 2 fink k 這兩種方...
中位數的中位數
參照王曉東的演算法設計 中位數的中位數,即將一串數分成n段,求其排好序了的中間那個數,再把這些所有中位數再求一次中位數。for int i 0 i r p 4 5 i 找中位數的中位數,r p 4即上面所說的n 5 int x lineselect a,p,p r p 4 5,r p 4 10 線性...
BFPRT(中位數的中位數)演算法
又稱為 中位數的中位數演算法 該演算法由 blum floyd pratt rivest tarjan 在1973年提出,最壞時間複雜度為o n 最差的空間複雜度為o logn 演算法步驟 1 將 n 個元素劃分為 n 5 個組,每組 5 個元素,若有剩餘,捨去 2 使用排序方法找到 n 5 個組中...