x軸上有n個點,每個點除了包括乙個位置資料x[i],還包括乙個權值w[i]。點p到點p[i]的帶權距離 = 實際距離 * p[i]的權值。求x軸上一點使它到這n個點的帶權距離之和最小,輸出這個最小的帶權距離之和。
input
第1行:點的數量n。(2 <= n <= 10000)output第2 - n + 1行:每行2個數,中間用空格分隔,分別是點的位置及權值。(-10^5 <= x[i] <= 10^5,1 <= w[i] <= 10^5)
輸出最小的帶權距離之和。input示例
5output示例-1 1
-3 1
0 17 1
9 1
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個點的帶權距離之和最小,輸出這個最小的...