2. K13593 时空穿梭机(cycraft)-T3
题目描述
随着游戏的深入进行,你也获得了很多的武器装备,每获取一件武器装备都需要付出一定的代价。
假设有一个时间轴,其上记录了在某个时间点对应有一个武器装备,我们赋予每一个时间点 ti 时刻对应的武器装备 i 的威力值为 wi。此时你拥有一台时空穿梭机,可以在时间轴上任意穿梭,假设穿梭到时间点 t,定义t 时间点到 ti 时间点获取 i 武器装备的代价为|t-ti|*wi。
请计算在哪个 t 时间点获取所有武器装备需付出的总代价最小,输出最小的总代价。
获取每一件武器装备必须都从 t 时间点出发,返回 t 时间点的代价为 0;|t-ti|表示 t-ti 的绝对值。
输入格式
共 n+1 行,第一行一个正整数 n,表示武器装备总数。
接下来 n 行,每行两个用空格分隔的正整数,分别表示时间 ti 和该时刻对应的武器装备的威力值 wi。
输出格式
共 1 行一个整数,表示获取所有武器的最小代价。
输入输出样例
输入样例1:复制
4 -1 7 0 2 7 3 3 4
输出样例1:复制
40
说明
样例解释:
穿梭到 0 时刻获取所有武器装备的总代价:1*7+7*3+3*4=40。
穿梭到 7 时刻获取所有武器装备的总代价:8*7+7*2+4*4=86 。
数据范围: 1 ≤ n ≤ 10000,-1000 ≤ ti,wi ≤ 1000。
【耗时限制】1000ms 【内存限制】128MB
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
LL n,t[100010],w[100010],ans=1e9;
int main(){
freopen("cycraft.in","r",stdin);
freopen("cycraft.out","w",stdout);
scanf("%lld",&n);
for(LL i=1;i<=n;i++) scanf("%lld%lld",&t[i],&w[i]);
for(LL i=-1000;i<=1000;i++){
LL sum=0;
for(LL j=1;j<=n;j++) sum+=abs(i-t[j])*w[j];
ans=min(ans,sum);
}
cout<<ans;
return 0;
}