郑厂长系列故事——体检(hdu 4519)
2016-01-20 16:31
148 查看
郑厂长系列故事——体检
Time Limit: 500/200 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 1300 Accepted Submission(s): 717
[align=left]Problem Description[/align]
郑厂长不是正厂长
也不是副厂长
他根本就不是厂长
只是公司的一个码农
郑厂长所在的腾讯公司每一年都要组织员工体检,比如量身高体重、测血压之类的,今年也不例外。
这次总共有N位员工接受体检,并且每个员工都需要做K个项目的检查才算完成整个体检的流程。现在来了M个医生为员工做身体检查,并且每一位医生都带齐了检查这K个项目的器材来(也就是说每个医生都能进行这K个项目中的任意一项检查)。
体检的详细流程是这样的:
公司事先制定好了M份体检单,每个医生手上都各自拿到一份体检单,上面已经安排好了检查的次序,以及每一次检查所对应的员工和项目。每个医生按照体检单上的次序为相应的员工做相应的项目检查。医生拿到的体检单上的名单也可以是空的,就是这个医生不需要检查任何员工的任何项目。
当然,制定出的这M份体检单不能有问题存在,否则就会有混乱的情况发生。按照常理来说,同一个医生在同一时间只能为一个员工做一个项目的检查。另外,同一个员工在同一时间也只能进行一个项目的检查,当然,不同的医生或不同的员工可以在同一时间进行项目检查。现在假设每个员工的每个项目的检查时间都是一分钟(其它时间花费忽略不计,只考虑项目检查工作所花费的一分钟)。
公司希望体检的工作越快完成越好,由于郑厂长大学期间曾经是一个ACMer,所以公司就将体检的安排工作交给了他,他需要计算出最快需要多少分钟能完成所有员工的体检工作。
[align=left]Input[/align]
输入的第一行为一个正整数T,表示有T组测试数据;
接下去有T组测试数据,每组测试数据占一行,包含三个整数N,K,M,N表示员工的人数,K表示体检的项目数,M表示医生的人数。
[Technical Specification]
T<=1000
1<=N<=100
1<=K<=10
1<=M<=100
[align=left]Output[/align]
对于每组数据,输出一个整数,表示最快需要多少分钟才能完成所有员工的体检工作。
[align=left]Sample Input[/align]
2
2 1 1
3 2 2
[align=left]Sample Output[/align]
2
3
Hint
对于第二组数据体检单的安排可以是如下情况:
第1个医生的体检单:员工A的项目1、员工A的项目2、员工B的项目2;
第2个医生的体检单:员工B的项目1、员工C的项目1、员工C的项目2。
第一分钟:第1个医生检查员工A的项目1,而第2个医生检查员工B的项目1;
第二分钟:第1个医生检查员工A的项目2,而第2个医生检查员工C的项目1;
第三分钟:第1个医生检查员工B的项目2,而第2个医生检查员工C的项目2;
这样就只需要3分钟即可完成体检工作。
[align=left]Source[/align]
2013腾讯编程马拉松初赛第三场(3月23日)
[align=left]Recommend[/align]
liuyiding | We have carefully selected several similar problems for you: 5609 5608 5607 5605 5604
思路:如果人数比医生人数少,那么所用时间就是所要体检的项目数。
如果人数大于等于医生人数那么时间就是项目数乘人数/医生人数向上取整
#include<stdio.h> #include<algorithm> #include<iostream> #include<string.h> #include<math.h> #include<queue> #include<string.h> #include<stack> #include<vector> #include<map> #define sc(x) scanf("%I64d",&x) #define pr(x) printf("%I64d",x) #define prr(x) printf("%I64d\n",x) #define prrr(x) printf(" %I64d",x) #define FOR(i,p,q) for(int i=p;i<=q;i++) const int NN=9937; using namespace std; int a[101][5][5]; int main(void) { int n,i,j,k,p,q; scanf("%d",&k); while(k--) { scanf("%d %d %d",&n,&p,&q); if(n<=q) printf("%d\n",p); else { int z=n*p; int kk=z/q; if(z%q!=0) { kk++; } printf("%d\n",kk); } } return 0; }
相关文章推荐
- window.location.href.substr(window.location.href.length - 6)
- 构造函数的继承
- 总结
- 【百金轻】:夕阳无限好 只是近黄昏
- flask(web服务器)—Python(四)
- 如何阅读论文
- rsync+inotify 实现实时同步
- js取小数点两位
- 初识docker
- 修改mysql最大连接次数问题,默认为100次
- 关于placeholder的点击的消失问题
- selenium启动firefox、ie、chrome各浏览器方法
- 富文本NSMutableAttributedString的相关设置
- 模式识别之bpnn---神经网络训练
- 使用UIAlertController报错
- gcc 编译简单loop error:error: ‘for’ loop initial declarations are only allowed in C99 mode
- Linux C语言 内存越界问题总结
- Android多tab实现方式
- CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。
- 转义字符