2019 ICPC 沈阳网络赛 Honk's pool

博客介绍了2019年ICPC沈阳网络赛中关于水池操作的问题。题目要求在一天内进行三次操作,包括从最满水池抽水、将水倒入最空水池或不做操作。作者通过分析发现,使用STL中的multiset数据结构可以有效减少时间复杂度,从而避免超时情况。博客提供了问题的分析和解决方案。
摘要由CSDN通过智能技术生成

原题地址
题意:一天可以进行三个操作。
第一个是从水池中水最多的水池中抽出1KG。
第二个是把抽出来的水倒进水池中水最少的水池中。
第三个是什么都不干
分析:直接按照题意往下写就行(不得不说,STL特别重要,我用for+sort就是超时,用这个mutliset时间用的还很少!)
代码:

#include<bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define rson mid+1,r,p<<1|1

using namespace std;
const int inf=1e9;
const int mod=1e9+7;
const int maxn=1e5+10;
int n,k,a[maxn];
multiset<int>q;
int main()
{
//ios:: sync_with_stdio(false);
//freopen("in","r", stdin);
    while(~scanf("%d%d",&n,&k))
    {
        q.clear();
        for(int i=1; i<=n; i++)
        {
            scanf("%d",&a[i]);
            q.insert(a[i]);
        }
        while(k--)
        {
            auto it=q. end();
            --it;
            int x=*it;
            q.erase(it);
            q.insert(x-1);
            it=q.begin();
            x=*it;
            q.erase(it);
            q.insert(x+1);
        }
        auto it=q.end();
        --it;
        int x=*it;
        it=q.begin();
        int y=*it;
        printf("%d\n",x-y);
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值