1 条题解

  • 0
    @ 2025-8-24 21:53:04

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Lemon
    **

    搬运于2025-08-24 21:53:04,当前版本为作者最后更新于2017-07-04 21:33:12,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    本题乍一看毫无头绪,但只要在纸上手算一下样例就能发现本题的关键,其实就是模拟

    首先设本题答案为ans

    我们知道,车站一定是修在第一间房子和最后一间房子之间。

    所以ans至少是 第一间房子和最后一间人数最小值 乘以 两间房子的距离。

    然后将人数少的那间清空,指针更新,人数多的那间减去人数少的。

    一直这么运算,直到只剩下一间房屋有人,那公交站肯定是修在他家门口啦。

    #include<bits/stdc++.h>
    using namespace std;
    long long s[100001],people[100001];
    int main()
    {
        long long n,l,k,i,end,tou;//end指当前的最后一间房屋,tou只当前第一间房屋。
        long long ans=0;
        cin>>l>>n;
        for(i=1;i<=n;i++)
          cin>>s[i]>>people[i];
        end=n;
        tou=1;
        while(end>tou)
        {
            k=min(people[tou],people[end]);
            people[tou]-=k;
            people[end]-=k;
            ans+=k*(s[end]-s[tou]);
            if(people[end]==0) end--;
            if(people[tou]==0) tou++;//如果房间被清空,则指针变动.
        }
        cout<<ans;
        return 0;
    }
    
    • 1

    信息

    ID
    2735
    时间
    1000ms
    内存
    125MiB
    难度
    4
    标签
    递交数
    0
    已通过
    0
    上传者