2019NHOI初中 第五题 蜈蚣

题目描述

      你有C只蜈蚣,每只蜈蚣有F只脚。冬天来了,要给蜈蚣们穿袜子。抽屉里有N种颜色的袜子,第i种颜色袜子的数量有a[i]只。对于一只蜈蚣来说,它所有的脚穿的袜子的颜色必须相同。现在你闭上眼睛,从抽屉里面随意拿出X只袜子,你要保证随意拿出来的X只袜子一定可以满足所有蜈蚣的需求。那么X的最小值是多少?如果X不存在,输出-1。
 

输入

 第一行,三个整数,C,F,N。1<=C<=50,1<=F<=100,1<=N<=100。
 第二行,N个整数,第i个整数是a[i]。1 <= a[i] <= 10000000。

输出

一个整数。最小的X,如果X不存在,输出-1。

样例输入 复制

1 100 5
1 1 1 1 100 

样例输出 复制

104

程序

 #include <bits/stdc++.h>
using namespace std;
  int fewestSocks(int C, int F, vector<int> sockCounts) {
    int sum = 1 - F;
    priority_queue<int> q;
    for (int it=0; it < sockCounts.size(); it++) q.push(sockCounts[it]);
    for (int i = 1; i <= C; ++i) {
      int x = q.top();
      q.pop();
      if (x < F) return -1;
      x -= F;
      q.push(x);
      sum = max(sum, -min(F-1, x));
    }
    while (q.size()) {
      int x = q.top();
      q.pop();
      sum += min(F - 1, x);
    }
    return sum + C * F;
  }
  
  int main()
  {
        int c,f,n;
        cin>>c>>f>>n;
        vector<int> v;
        v.clear();
        for(int i=1;i<=n;i++) 
        {
            int x;
            cin>>x;
            v.push_back(x);
        }
        cout<<fewestSocks(c,f,v)<<endl;
        return 0;
  
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值