初赛第五场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 }

 

posted on 2017-06-06 21:41  hhhhx  阅读(199)  评论(0编辑  收藏  举报

导航