题目描述
你有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;
}