初赛第五场A
UCloud 刚刚建立一个新机房,近日正在进行网络搭建。机房内有 n 台服务器和m个分线器,整个机房只有一个网线出口。分线器的作用是将一根网线转换成多根网线。蒜头君也知道每个分线器输出的最大网线根数(不一定要将分线器输出的每根线都用上),问你至少需要使用多少个分线器才能使得每台服务器都有网线可用。
输入格式
第一行输入 n,m(0≤n,m≤100)
第二行输入包含 m个整数的数组 A(0≤Ai≤10)i≤10) 表示每个分线器输出的最大网线根数。
输出格式
输出最少需要的分线器数量。若不能使得所有服务器都有网线可用,输出一行Impossible
。
样例输入
10 4 2 7 2 3
样例输出
3
思路:看完题目就开始敲了,然后忘记0,1的情况,懵逼30分钟,才发现,心态蹦了
1 #include<bits/stdc++.h> 2 using namespace std; 3 int a[103]; 4 int main(){ 5 int n,m; 6 scanf("%d%d",&n,&m); 7 for(int i=1;i<=m;i++){ 8 scanf("%d",&a[i]); 9 } 10 if(n==0||n==1){ 11 cout<<0<<endl;return 0; 12 } 13 sort(a+1,a+1+m); 14 int sum=a[m]; 15 if(sum>=n){ 16 cout<<1<<endl;return 0; 17 } 18 int ss=1; 19 for(int i=m-1;i>=1;i--){ 20 sum+=a[i]-1; 21 ss=ss+1; 22 if(sum>=n){ 23 cout<<ss<<endl;return 0; 24 } 25 } 26 printf("Impossible\n"); 27 return 0; 28 }