2016级算法第二次上机-B.Bamboo的OS实验
Bamboo的OS实验#
分析##
首先理解题意,要完成不同数量的不同命令,但是完成相同的命令之间必须有n个间隔,为使得时间最短,自然优先用其他命令来填充这n分钟的时间,由于数量少的命令可以用来填充空隙,所以次数最多的命令是起作用最大的。而且注意到,每次具体执行的是哪个命令并不影响时间,只与命令的数量有关(这有点贪心的思想,当预习吧)
基于以上分析,可以有以下几种方法:
1、按照命令数量从大到小排列,每次都是从数量最多的命令开始新一轮周期,这样是用时最少的。
举个栗子,命令1 2 3 4 5各有6 1 1 1 1个,n=2,如果采用 1->2->3->4->5->1_->..这样就会导致数量最多的命令1每个都要有2个空的时间段来填充;最佳的思想是1->2->3->1->4->5,这样尚未进入周期的命令1才需要额外的时间填充。
那么,将命令按数量从大到小排列后,总是选择当前数量最多的开始一轮周期,对选择的命令数量-1,时间++;每次这个周期一旦开始就要开始记录是否到n,周期结束后,要重新排序以保证从大到小的顺序,直到最多的命令也执行完毕,后面无需时间填充
核心代码如下:
static bool cmp(int i, int j)
{
return i>j;
}
int Map[35];
int main()
{
int c,n,x;
while(~scanf("%d",&x))
{
for(int i=0; i<35; i++)Map[i]=0;
for(int i = 0; i<x; i++)
{
cin>>c;
Map[c]++;
}
scanf("%d",&n);
sort(Map,Map+35,cmp);
int time = 0;
while(Map[0]!=0)
{
int k =0;
while(k<=n)
{
if(k<31&&Map[k]>0)
{
Map[k]--;
}
else if(Map[0]==0)break;
k++;
time++;
}
sort(Map,Map+35,cmp);
}
printf("%d\n",time);
}
}
2、核心思路还是上面的思路,但是上面每次都保持数组从大到小的性质可以用优先队列来实现。只是可能要借助临时的数组temp[]来存储从优先队列中pop出的数据。
3、也是大部分AC代码采用的思路。其实不管命令有多少,n等于几,这些命令总是要做完的,所花的时间一定是>=x的。所以只需要看需要填充多少思考人生时间。
上图:
https://coding.net/s/2791e979-c082-43b9-9b28-e43496fe9c76
//用画图画的,专治强迫症
深蓝色的就是用命令填充的,浅蓝色即为“思考人生”时间。
显然总的时间=任务数+思考时间
当只有第一排的1而后面全是浅蓝色时,是需要空闲时间最多的情况,max_num=n*(最多的命令数-1),因为最后一轮后面是不填充的,所以-1;
我们要做的就是从这个最大值里逐列减去已经有命令的格子。
核心代码如下,可以看图体会:
int Map[35];
for(int i=0; i<35; i++)Map[i]=0;
for(int i = 0; i<tasks.size(); i++)
{
Map[tasks[i]]++;
}
sort(Map,Map+35,cmp);
int max = Map[0]-1;
int slot = max*n;
for(int i = 1;i<31;i++)
{
slot -= min(Map[i],max);
}
int ans;
if(slot>0)ans = slot+tasks.size();
else ans = tasks.size();
2016级算法第二次上机-B.Bamboo的OS实验的更多相关文章
- 2016级算法第二次上机-D.Bamboo的饼干
Bamboo的饼干 分析 从两个数组中各取一个数,使两者相加等于给定值.要注意去重和排序 难度不大,方法很多,基本只要不大于O(n^2 ) 的都可以过.本意想考察二分搜索 还可以借助stl中的map, ...
- 2016级算法第二次上机-G.ModricWang's Real QuickSort
873 思路 这是一道非常基础的题,目的是帮助大家回顾快排相关的知识.大家完成此题之后应该就对快排有比较深刻的印象了. 对于整个快排的流程,题目描述中已经给了清晰完整的伪代码.需要自己加工的部分就是, ...
- 2016级算法第二次上机-F.ModricWang's Number Theory II
891 ModricWang's Number Theory II 思路 使得序列的最大公约数不为1,就是大于等于2,就是找到一个大于等于2的数,它能够整除序列中的所有数. 考虑使得一个数d整除数组中 ...
- 2016级算法第二次上机-E.AlvinZH的儿时梦想——运动员篇
862-AlvinZH的儿时梦想--运动员篇 思路 难题. 应该想到,不管给出的数据如何,每一个淘汰的人不会对最终答案产生任何影响,所以每次淘汰就把人除掉就可以了,最后剩下的两个人计算它们从开始到相遇 ...
- 2016级算法第二次上机-C.AlvinZH的儿时梦想——坦克篇
872 AlvinZH的儿时梦想----坦克篇 思路 简单题.仔细看题,题目意在找到直线穿过的矩形数最小,不能从两边穿过.那么我们只要知道每一行矩形之间的空隙位置就可以了. 如果这里用二维数组记住每一 ...
- 2016级算法第二次上机-A.画个圈圈诅咒你
890 画个圈圈诅咒你 思路 简单题.题目中的圆并没有什么实际作用,简化成线段重合问题会更好理解些. 暴力解法:使用双重for循环会T到想哭,记住最直接的方法一般是过不了题的. 解法一:二分查找.空间 ...
- 题解:2018级算法第二次上机 Zexal的排座位
题目描述: 样例: 实现解释: 一道看似复杂但实际既是斐波那契变形的题目 知识点:递推,斐波那契 通过问题的描述,可以得到以下规律:(除了座位数为一时)男生坐最后时,倒数第二个一定是女生:女生坐最后, ...
- 题解:2018级算法第二次上机 Zexal的流水线问题
题目描述: 样例: 实现解释: 最基础的流水线调度问题,甚至没有开始和结束的值 实现方法即得出状态转移方程后完善即可,设a[][i]存储着第一二条线上各家的时间花费,t[][i]存储着i处进行线路切换 ...
- 题解:2018级算法第二次上机 Zexal的竞赛
题目描述: 样例: 实现解释: 一道需要一点思考的动态规划题目 知识点:动态规划,数据记录 首先将题目描述调整:分别输入不同分数的题目总分(便于后续计算),当获得了i分数的总分后无法获得i-1和i+1 ...
随机推荐
- 第二话:javascript中闭包的理解
闭包是什么? 通过闭包,子函数得以访问父函数的上下文环境,即使父函数已经结束执行. OK,我来简单叙述下,先上图. 都知道函数是javascript整个世界,对象是函数,方法是函数,并且js中实质性的 ...
- Redis学习(3)——认识配置文件redis.conf[转]
#是否作为守护进程运行 daemonize yes #配置 pid 的存放路径及文件名,默认为当前路径下 pidfile redis.pid #Redis 默认监听端口 port 6379 ...
- redis集群部署及常用的操作命令(上)
简单说下自己测试搭建简单的redis集群的大体步骤: 1.首先你的有6个redis(官方说最少6个,3master,3slave),可以先在一台机器上搭建,搭建到多台上应该只需要改变启动命令即可(可能 ...
- efcore dbfirst 通过数据库表反向生成model
创建class library并设置为启动项目 使用nuget控制台,设置当前项目为新建的class library Install-Package Microsoft.EntityFramework ...
- eclipse (android环境搭建)
如何安装java环境 http://jingyan.baidu.com/article/a24b33cd59b58e19fe002bb9.html eclipse安装教程 http://jingyan ...
- 白盒测试实践项目(day2)
到目前为止: 李建文同学大体完成代码复审,并在完善文档,汪鸿同学和杨瑞丰同学都在熟悉各自的任务,胡俊辉同学设计了JUnit测试用例,张颖同学负责维护这几天的博客. 目前小组成员还未碰到不能解决的问题. ...
- 视觉SLAM实战(一):RGB-D SLAM V2
写在前面 首先打个广告.SLAM研究者交流QQ群:254787961.欢迎各路大神和小白前来交流. 看了前面三篇博文之后,是不是有同学要问:博主你扯了那么多有用没用的东西,能不能再给力一点,拿出一个我 ...
- Thinkphp 导出csv 先存储在服务器,然后输出链接下载
public function exportQiandao() { // header("Content-type:text/html;charset=gb2312"); ini_ ...
- Discuz核心函数的解析
dz采用的是多入口的方式,在每个入口函数你能看到引用,启动核心类的语句(其余省略),如下: require './source/class/class_core.php'; C::app()-> ...
- 第08章 ElasticSearch Java API
本章内容 使用客户端对象(client object)连接到本地或远程ElasticSearch集群. 逐条或批量索引文档. 更新文档内容. 使用各种ElasticSearch支持的查询方式. 处理E ...