HDU----(4519)郑厂长系列故事——体检
郑厂长系列故事——体检
Time Limit: 500/200 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 1097 Accepted Submission(s): 596
Problem Description
郑厂长不是正厂长 也不是副厂长 他根本就不是厂长 只是公司的一个码农 郑厂长所在的腾讯公司每一年都要组织员工体检,比如量身高体重、测血压之类的,今年也不例外。 这次总共有N位员工接受体检,并且每个员工都需要做K个项目的检查才算完成整个体检的流程。现在来了M个医生为员工做身体检查,并且每一位医生都带齐了检查这K个项目的器材来(也就是说每个医生都能进行这K个项目中的任意一项检查)。 体检的详细流程是这样的: 公司事先制定好了M份体检单,每个医生手上都各自拿到一份体检单,上面已经安排好了检查的次序,以及每一次检查所对应的员工和项目。每个医生按照体检单 上的次序为相应的员工做相应的项目检查。医生拿到的体检单上的名单也可以是空的,就是这个医生不需要检查任何员工的任何项目。 当然,制定出的 这M份体检单不能有问题存在,否则就会有混乱的情况发生。按照常理来说,同一个医生在同一时间只能为一个员工做一个项目的检查。另外,同一个员工在同一时 间也只能进行一个项目的检查,当然,不同的医生或不同的员工可以在同一时间进行项目检查。现在假设每个员工的每个项目的检查时间都是一分钟(其它时间花费 忽略不计,只考虑项目检查工作所花费的一分钟)。 公司希望体检的工作越快完成越好,由于郑厂长大学期间曾经是一个ACMer,所以公司就将体检的安排工作交给了他,他需要计算出最快需要多少分钟能完成所有员工的体检工作。
Input
输入的第一行为一个正整数T,表示有T组测试数据; 接下去有T组测试数据,每组测试数据占一行,包含三个整数N,K,M,N表示员工的人数,K表示体检的项目数,M表示医生的人数。 [Technical Specification] T<=1000 1<=N<=100 1<=K<=10 1<=M<=100
Output
对于每组数据,输出一个整数,表示最快需要多少分钟才能完成所有员工的体检工作。
Sample Input
2 2 1 1 3 2 2
Sample Output
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分钟即可完成体检工作。
Source
题目其实不是很水的,关键在于这道题的事项,相当于一道机器调度问题,(个人感觉特别想流水线问题的简化)
分析一下这道题的态势,只要尽可能的使m(不管是医生还是机器)处于一种饱和状态下运行即可。
那么对于 n<=m的情况,其实分析就可以知道,只需要k分钟。
那么对于相对于复杂一点的n>m,我们就要考虑较多的情况。其实手写一个列子就可以很清楚的知道了:
比如: 4 4 3
4 4 4 4 面对三台机器:
1分钟: 3 3 3 4
2 分钟:2 2 3 3
3 分钟: 1 2 2 2
4 分钟: 1 1 1 1
5分钟: 1 0 0 0
6分钟: 0 0 0 0 所以结果为 6分钟
不知道发现没有,其实周期是 n 同时项目剩余未k-m;
然后我们其实可以得出
if n*k%m!=0
(n*k)/m +1;
else
(n*k)/m
当然你也可以去模拟计算....
代码:
1 #include<cstdio>
2 int main()
3 {
4 int t,n,m,k;
5 scanf("%d",&t);
6 while(t--){
7 scanf("%d%d%d",&n,&k,&m);
8 int ans=0;
9 if((n*k)%m) ans=1;
10 if(n>=m)printf("%dn",ans+((n*k)/m));
11 else printf("%dn",k);
12 }
13 return 0;
14 }
- IronPython 2.0 beta 5
- node.js如何制作命令行工具(一)
- (28) 剖析包装类 (下) / 计算机程序的思维逻辑
- Linux进程监控工具Supervisor简易使用教程
- (29) 剖析String / 计算机程序的思维逻辑
- (27) 剖析包装类 (中) / 计算机程序的思维逻辑
- Python量子力学计算模拟以及数据可视化
- (26) 剖析包装类 (上) / 计算机程序的思维逻辑
- (25) 异常 (下) / 计算机程序的思维逻辑
- (24) 异常 (上) / 计算机程序的思维逻辑
- Python3.6新特性官方文档中文版
- (23) 枚举的本质 / 计算机程序的思维逻辑
- (22) 代码的组织机制 / 计算机程序的思维逻辑
- Python开发微信公众号后台(系列二)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 某小型公司持续集成工具 Jenkins 实践
- 使用RBAC Impersonation简化Kubernetes资源访问控制
- 求求你别再用 MySQL offset 和 limit 分页了?
- 短视频带货源码,获取购物车中所有商品列表并加载显示
- 【Flutter 实战】菜单(Menu)功能
- 【Flutter 实战】路由堆栈详解
- 【Flutter 实战】全局监听路由堆栈变化
- 数据挖掘从入门到放弃:线性回归和逻辑回归
- 【Flutter 实战】文件系统目录
- 【原创】Spring Boot终极篇《上》
- 【原创】Spring Boot终极篇《下》
- 面试官:JDK、JRE、JVM 三者什么关系?
- 面试官:什么是面向对象?
- 详解SpringCloud中RabbitMQ消息队列原理及配置,一篇就够!
- 面试官:什么是字节码?它最大的优势是什么?