1110 距離之和最小 V3

2021-08-14 07:08:41 字數 1269 閱讀 3573

x軸上有n個點,每個點除了包括乙個位置資料x[i],還包括乙個權值w[i]。點p到點p[i]的帶權距離 = 實際距離 * p[i]的權值。求x軸上一點使它到這n個點的帶權距離之和最小,輸出這個最小的帶權距離之和。

input

第1行:點的數量n。(2 <= n <= 10000)

第2 - n + 1行:每行2個數,中間用空格分隔,分別是點的位置及權值。(-10^5 <= x[i] <= 10^5,1 <= w[i] <= 10^5)

output

輸出最小的帶權距離之和。
input示例

5

-1 1

-3 1

0 17 1

9 1

output示例

20

題解:經典中位數題目衍生出來的。沒有權值時是直接找中位數即是找到了要求的點,當有權值時,則要轉換一下,把權值轉換為個數,就當作在這個位置有權值個點。然後求中位數即是答案。

**:

#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;

typedef long long ll;

typedef pairp;

const int inf = 0x3f3f3f3f;

const ll linf = 0x3f3f3f3f3f3f3f3f;

const double pi = acos(-1.0);

const double eps = 1e-10;

const int maxn = 1e5+7;

const int mod = 1e9+7;

int n;

int x[maxn],w[maxn];

ll cnt[maxn<<1];

int main()

sum = ceil(sum/2.0);

ll now = 0;

int pos = 0;

for(int i = 0;i < maxn<<1;i++)

}ll ans = 0;

for(int i = 1;i <= n;i++)

printf("%lld\n",ans);

return 0;

}

經驗:權值不一定就是權值,有時可以做適當轉變,例如本題看作點的個數。

1110 距離之和最小 V3

x軸上有n個點,每個點除了包括乙個位置資料x i 還包括乙個權值w i 點p到點p i 的帶權距離 實際距離 p i 的權值。求x軸上一點使它到這n個點的帶權距離之和最小,輸出這個最小的帶權距離之和。收起第1行 點的數量n。2 n 10000 第2 n 1行 每行2個數,中間用空格分隔,分別是點的位...

1110 距離之和最小 V3

1110 距離之和最小 v3 基準時間限制 1 秒 空間限制 131072 kb x軸上有n個點,每個點除了包括乙個位置資料x i 還包括乙個權值w i 該點到其他點的帶權距離 實際距離 權值。求x軸上一點使它到這n個點的帶權距離之和最小,輸出這個最小的帶權距離之和。input 第1行 點的數量n。...

51nod 1110 距離之和最小 V3

1110 距離之和最小 v3 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 x軸上有n個點,每個點除了包括乙個位置資料x i 還包括乙個權值w i 點p到點p i 的帶權距離 實際距離 p i 的權值。求x軸上一點使它到這n個點的帶權距離之和最小,輸出這個最小的...