[codevs1507]酒厂选址

来源:互联网 发布:淘宝宝贝无线链接转换 编辑:程序博客网 时间:2024/04/30 19:51

题目←

一开始想到了前缀和优化,发现是n^2,看数据范围没敢打
于是去搜题解……结果发现有人就是这么过的23333
于是代码↓

#include<iostream>#include<cstdio>#include<algorithm>using namespace std;const long long MAXN = 200000 + 50;long long dis1[MAXN],dis2[MAXN];long long n,w[MAXN],v[MAXN];long long get_dis1(long long now,long long x){    if(x < now)return dis1[now] - dis1[x];    else return dis1[now] + dis2[x];}long long get_dis2(long long now,long long x){    if(x > now)return dis2[now] - dis2[x];    else return dis2[now] + dis1[x];}long long ans;void check(long long now){    long long tot = 0;    for(long long i = 1;i <= n;i ++)    {        if(i == now)continue;        tot += w[i] * min(get_dis1(now,i),get_dis2(now,i));    }    if(!ans)ans = tot;    else if(tot < ans)ans = tot;}int main(){    scanf("%lld",&n);    for(long long i = 1;i <= n;i ++)    {        scanf("%lld%lld",&w[i],&v[i]);        dis1[i] = dis1[i - 1] + v[i - 1];    }    for(long long i = n;i >= 1;i --)    {        dis2[i] = dis2[i + 1] + v[i];    }    for(long long i = 1;i <= n;i ++)    {        check(i);    }    printf("%lld",ans);    return 0;}

wyh:我的n^2可以过100000!

原创粉丝点击