UCloud 机房的网络搭建(计蒜客初赛第五场)

UCloud 刚刚建立一个新机房,近日正在进行网络搭建。机房内有 nn 台服务器和 mm 个分线器,整个机房只有一个网线出口。分线器的作用是将一根网线转换成多根网线。蒜头君也知道每个分线器输出的最大网线根数(不一定要将分线器输出的每根线都用上),问你至少需要使用多少个分线器才能使得每台服务器都有网线可用。

输入格式

第一行输入 n,m(0 \le n,m \le 100)n,m(0≤n,m≤100)。

第二行输入包含 mm 个整数的数组 A(0 \le A_i \le 10)A(0≤A?i??≤10) 表示每个分线器输出的最大网线根数。

输出格式

输出最少需要的分线器数量。若不能使得所有服务器都有网线可用,输出一行Impossible

样例说明

一共需要 33 个分线器,最大输出根数分别为 7,3,27,3,2,连接方法如下图所示:

样例输入

10 4
2 7 2 3

样例输出

3
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstdlib>
 4 #include <algorithm>
 5
 6 using namespace std;
 7
 8 int main()
 9 {
10     int n,m;
11     int a[200];
12     int sum=0;
13     int cou=0;
14     int flag=0;
15     scanf("%d %d",&n,&m);
16     if(m==0){
17         if(n==0){
18             printf("0\n");
19         }else if(n==1){
20             printf("0\n");
21         }else{
22             printf("Impossible\n");
23         }
24     }else{
25         for(int i=0;i<m;i++){
26             scanf("%d",&a[i]);
27         }
28         if(n==1){
29             printf("0\n");
30         }else if(n==0){
31             printf("0\n");
32         }else{
33             sort(a,a+m);
34             for(int i=m-1;i>=0;i--){
35                 if(i==m-1){
36                     sum+=a[i];
37                     cou++;
38                 }else{
39                     sum+=a[i]-1;
40                     cou++;
41                 }
42                 if(sum>=n){
43                     printf("%d\n",cou);
44                     flag=1;
45                     break;
46                 }
47             }
48             if(flag==0){
49                 printf("Impossible\n");
50             }
51         }
52     }
53     return 0;
54 }
时间: 2024-10-06 09:10:51

UCloud 机房的网络搭建(计蒜客初赛第五场)的相关文章

UCloud 的安全秘钥 (计蒜客初赛第五场)(待解决)

20.7% 1200ms 262144K 每个 UCloud 用户会构造一个由数字序列组成的秘钥,用于对服务器进行各种操作.作为一家安全可信的云计算平台,秘钥的安全性至关重要.因此,UCloud 每年会对用户的秘钥进行安全性评估,具体的评估方法如下: 首先,定义两个由数字序列组成的秘钥 aa 和 bb 近似匹配(\approx≈) 的关系.aa 和 bb 近似匹配当且仅当同时满足以下两个条件: |a|=|b|∣a∣=∣b∣,即 aa 串和 bb 串长度相等. 对于每种数字 cc,cc 在 aa 

腾讯课堂的物理实验(2017计蒜客初赛第三场)

A题 在腾讯课堂的物理课上,进行了一个有趣的物理实验. 在一个长度为 LL 米的光滑轨道上,小车 A 在 00 时刻以 1\mathrm{m/s}1m/s 的速度从左端出发向右运动,小车 B 在 tt 时刻以 1\mathrm{m/s}1m/s 的速度从右端出发向左运动,两个小车的质量相等.假设所有碰撞都是弹性碰撞,也就是当两个小车相向碰撞时,他们各自会以原来的速度向相反的方向运动:小车和轨道两端发生碰撞时,小车会以原速度向反方向运动. 试求出 TT 时刻的时候,两个小车相距多远. 输入格式 输

2017 计蒜之道 初赛 第五场 A. UCloud 机房的网络搭建

贪心. 从大到小排序之后进行模拟,注意$n=1$和$n=0$的情况. #include <iostream> #include <cstdio> #include <cstring> #include <string> #include <algorithm> #include <vector> #include <queue> #include <stack> #include <map> #in

2017西安网络赛 计蒜客 Trig Function 切比雪夫多项式

http://www.docin.com/p-385138324.html 用以表示cosnx的关于cosx的多项式的通项公式 http://www.docin.com/p-232710665.html?docfrom=rrela 数列通项公式的求法(论文) 问答里说这个是切比雪夫多项式 我查了一下哇.. 第一类切比雪夫多项式 #include <stdio.h> #include <cstring> #include <iostream> #include <m

计蒜之道第五场C题

稀里糊涂拖到了第五场…… 最后倒在了自己脚下…… 变量名打错了找不出bug…… 人生还是真的尴尬呢…… 1 #include<bits/stdc++.h> 2 #define cl(a,b) memset(a,b,sizeof(a)) 3 #define debug(x) cerr<<#x<<"=="<<(x)<<endl 4 using namespace std; 5 typedef long long ll; 6 typ

2017计蒜客(四,五,六)

2017 计蒜之道 初赛 第四场 rank 178 题解 1A 1 #include <bits/stdc++.h> 2 using namespace std; 3 int n,m,k,v[110][110]; 4 void setrow(int c) 5 { 6 for(int j=1;j<=m;j++) v[c][j]=1; 7 } 8 void setcol(int c) 9 { 10 for(int j=1;j<=n;j++) v[j][c]=1; 11 } 12 int

计蒜客 无脑博士和他的试管们

无脑博士有三个容量分别是A,B,C升的试管,A,B,C分别是三个从1到20的整数,最初,A和B试管都是空的,而C试管是装满硫酸铜溶液的.有时,无脑博士把硫酸铜溶液从一个试管倒到另一个试管中,直到被灌试管装满或原试管空了.当然每一次灌注都是完全的.由于无脑博士天天这么折腾,早已熟练,溶液在倒的过程中不会有丢失. 写一个程序去帮助无脑博士找出当A是个是空的时候,C试管中硫酸铜溶液所剩量的所有可能性. 输入包括一行,为空格分隔开的三个数,分别为整数A,B和C. 输出包括一行,升序地列出当A试管是空的时

简单斐波那契——计蒜客(4)

题目来自“计蒜客”第4题. 解算法题之前,务必先写出与之对应的数学表达式,用于描述算法. 数学描述如图: 根据“数学描述“,写出代码如下: #include <stdio.h> int main() { int N =0 ; scanf("%d", &N); int i, fn1 = 1, fn2 = 0, fn; switch(N) { case 0: printf("0"); break; case 1: printf("1&quo

计蒜客普及组模拟赛

今天没事闲的看到计蒜客有个普及组模拟赛,就当练了练手去打了,成绩低的可怜...400分崩成280分AK梦想化作泡影 第一题 同学的爱好 链接:https://nanti.jisuanke.com/t/17291 小学应用题难度?大概画个图就能懂,把每个部分都标上号,算出a,b,c,d,e,f的部分,进行运算就行了. 不多解释了,直接上代码 #include<iostream> #include<cstdio> #include<algorithm> #include&l