桂电第一次程序设计 C STL 排序

Problem 1197 # 共享厕所
ediszhao添加于2017-12-22 15:00:56
时间限制 : 1000MS 内存限制 : 65536KB
×提示 : 你已解决此题目。
问题描述
马路边有一个共享厕所,厕所里一共装有m 个马桶可供人们拉尿,每个人每秒钟的拉尿量相等,均为1。 现在有n 个人准备拉尿,他们的初始拉尿顺序已经确定。将这些人按拉尿顺序从1 到n编号,i 号同学的拉尿量为ai。拉尿开始时,1 到m 号人各占一个马桶,并同时开始拉尿。当其中某个人j 完成其拉尿量要求aj 后,下一名排队等候拉尿的人x马上接替j人的位置开始拉尿。这个换人的过程是瞬间完成的。即第j人第k秒结束时完成拉尿,则第x人第k+1 秒立刻开始拉尿。若当前拉尿人数n’不足m, 则只有n’个马桶供使用,其它m-n’个马桶关闭。 现在给出n 名人的拉尿量,按照上述拉尿规则,问所有人都拉完尿需要多少秒。

输入
第1 行是n 和m,分别表示拉尿人数和马桶个数。

第2 行n 个整数a1、a2、……、an,ai 表示i 号同 学的拉尿量。

输出
输出结果表示拉尿所需的总时间,结果只占一行。

输入范例
5 3

4 4 1 2 1

8 4

23 71 87 32 70 93 80 76

输出范例
4

163

Hint

对于第一个样例:

第1 秒,3 人拉尿。第1 秒结束时,1、2、3 号人每人的已拉尿量为1,3 号人拉完尿,4 号人接替3 号人开始拉尿。

第2 秒,3 人拉尿。第2 秒结束时,1、2 号人每人的已拉尿量为2,4 号人的已拉尿量为1。

第3 秒,3 人拉尿。第3 秒结束时,1、2 号人每人的已拉尿量为3,4 号人的已拉尿量为2。4 号人拉完尿,5 号人接替4 号人开始拉尿。

第4 秒,3 人拉尿。第4 秒结束时,1、2 号人每人的已拉尿量为4,5 号人的已拉尿量为1。1、2、5 号人拉完尿,即所有人完成拉尿。

总拉尿时间为4 秒。

讲真的。桂电的题目出的。真的恶心。就不能换个说法吗。。。尴尬。
先排满人,然后往最小的数上加。到最后。最大的数就是了。这里可以用stl容器。顺序容器,可以省去自己排列的步骤。

#include<bits/stdc++.h>
#define max(a,b) a>b?a:b
#define min(a,b) a<b?a:b
using namespace std ;
typedef long long ll;
typedef unsigned long long ull;
const ll MAX =10050;
int main(){
    int n,m;
    ll  t[MAX];
    while(cin>>n>>m){
        memset(t,0,sizeof(t));
        int a ;
        int ans=9999999999;
        if(m>=n){
            for(int i = 1 ; i <= n ; i++){
                cin>>a;
                ans = min(ans,a);
            }
        }
        else {
            for(int i = 0 ; i < m ; i++)
                cin >>t[i];
            sort(t,t+m);
            for(int i = 0 ; i < n-m ; i++){
                cin >> a;
                t[0]+=a;
                sort(t,t+m);
            }
            ans = t[m-1];
        }
        cout<<ans<<endl;

    }

    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值