充电 | ||||||
|
||||||
Description | ||||||
玻璃小屋内有n个插排,屋内有 m 个需要供电的机器,并且墙上有k个可以直接使用的插口。知道了每个插排上的插口的个数,并且所有的插头和插口都是可以匹配的。问你最少用几个插排可以让所有机器都供上电?
|
||||||
Input | ||||||
多组测试数据,每组第一行输入n, m, k。(1 ≤ n, m, k ≤ 50) 第二行有n个数,分别表示每个插排上插口的个数。 |
||||||
Output | ||||||
输出最少需要几个插排。如果有电器无法充上电则输出-1。 每组输出占一行。
|
||||||
Sample Input | ||||||
3 5 3 3 1 2 4 7 2 3 3 2 4 5 5 1 1 3 1 2 1
|
||||||
Sample Output | ||||||
1 2 -1 |
||||||
Author | ||||||
曾卓敏 @hrbust |
#include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> #include<math.h> using namespace std; int a[55]; bool cmp(int x,int y) { return x>y; } int main() { int n,m,k; while(~scanf("%d%d%d",&n,&m,&k)) { int i; int ans=0; for(i=0;i<n;i++) { scanf("%d",&a[i]); ans+=a[i]; } if(m<=k) { printf("0\n"); } else if(ans+k-n<m) { printf("-1\n"); } else { sort(a,a+n,cmp); int sum=k; int key=0; for(i=0;i<n;i++) { key++; sum=sum+a[i]-1; if(sum>=m) { printf("%d\n",key); break; } } } } return 0; }