描述
A学校共派出M名选手参加NOIP,现在他们正赶往火车站参加比赛。火车站共有N个检票口。
由于检票员的操作速度不同,每个检票口的通行速度也就不同。平均测量,第k个检票口的速度为Tk秒。
在候车时,选手们就开始思考,假设一开始所有检票口都处于准备状态,每个检票口一次只能通过一人。
那么M名选手至少需要多少时间全部通过检票口。
输入
第1行:用空格隔开的两个整数N、M,1≤N≤103、1≤M≤109),分别表示检票口数量以及人数。
接下来的N行,每行一个整数,表示每个检票口的检票时间。范围在[1,109]
输出
一行,一个整数,M名选手全部通过的最少时间。
样例输入
7 10
3
8
3
6
9
2
4
样例输出
8
C++这怎么做`??
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- qfl_sdu 2021-07-15 15:58关注
代码如下,如有帮助,请采纳一下,谢谢。
#include <stdio.h> //n个检票口,m个人,a表示每个检票口的检票时间,b表示每个检票口的检票人数 int fun(int a[],int b[],int n,int m) { int i; int max,min,maxIndex,minIndex; b[0] = m; while(1) { maxIndex = 0; minIndex = 0; max = a[0]*b[0]; min = a[0]*b[0]; for(i=1;i<n;i++) { if(max < a[i]*b[i]) { max = a[i]*b[i]; maxIndex = i; } if(min > a[i]*b[i]) { min = a[i]*b[i]; minIndex = i; } } if(max - min > a[minIndex]) { b[maxIndex] -=1; b[minIndex] +=1; /*for(int k = 0;k<n;k++) printf("%d ",b[k]); printf("\n");*/ }else break; } return max; } int main() { int m,n,i; int sum; int a[20],b[20]={0}; printf("请输入N和M的值:"); scanf("%d %d",&n,&m); printf("请输入每个检票口的检票时间:"); for(i=0;i<n;i++) scanf("%d",&a[i]); //初始化b for(i=0;i<n;i++) b[i] = 0; sum = fun(a,b,n,m); printf("最短时间:%d\n",sum); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥20 有关区间dp的问题求解
- ¥15 多电路系统共用电源的串扰问题
- ¥15 slam rangenet++配置
- ¥15 有没有研究水声通信方面的帮我改俩matlab代码
- ¥15 对于相关问题的求解与代码
- ¥15 ubuntu子系统密码忘记
- ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
- ¥15 保护模式-系统加载-段寄存器
- ¥15 电脑桌面设定一个区域禁止鼠标操作
- ¥15 求NPF226060磁芯的详细资料