01day2
小明搬家
模拟
【问题描述】
小明要搬家了,大家都来帮忙。
小明现在住在第N楼,总共K个人要把X个大箱子搬上N楼。
最开始X个箱子都在1楼,但是经过一段混乱的搬运已经乱掉了。最后大家发现这样混乱地搬运过程效率太低了,于是总结出了提高效率的方法。
大家的速度都是每分钟上(或下)一层楼。所有向上走的人手中都拿一个箱子,所有向下走的人手中都不拿箱子。到达第N层立刻放下箱子向下走,到达第1层立刻拿起箱子向上走。当一个人向上走,另一人向下走而在楼道里相遇时,向上走的人将手中的箱子交给另一人,两人同时反向。即原来拿箱子向上走的人不拿箱子向下走,原来不拿箱子向下走的人现拿着箱子向上走。
求将所有箱子搬完所需的最短时间。
【输入】
第一行N(N≤10^9),K(K≤500000),M(M≤10^9),分别表示楼层数、人数、还放在一楼地上的箱子数。
接下来K行,每行两个数Ai,Bi。
Ai表示第i人现所在的楼层数,Bi为0或1,为0表示第i人正拿着箱子向上走,为1表示第i人不拿箱子向下走。
输入满足没有任意两人正在同一楼层,在第1层的人一定正拿着箱子向上走,在第N层的人一定正不拿箱子向下走。
【解题过程】
首先想到了白书上的“蚂蚁”一题,主要思想是:两人相遇后掉头其实相当于两个人只是擦肩而过,路线并没有变,只要交换一下两人的序号即可。而这道题并不要求输出每个人的状态,所以连序号也不用交换。
然后注意到对于每个人经过 2n-2 的时间之后必然会回到当前状态而且已经搬运了一个箱子,那么对于整体而言,每过 2n-2 的时间就会少掉 k 个箱子。所以前 (m div k)*k 个箱子的搬运时间就等于 (m div k)*(2n-2)。
然后考虑剩下的箱子。此时所有人都回到了初始状态。由于初始状态中某些人正在运输物品(这些物品是不算到 M 里面的),所以可以先让这些人把自己的箱子运输完。
此时剩下的箱子数为 m mod k。对于每个人我们可以计算出其搬运一个箱子所需的时间,那么我们只需将这些时间排序,第 m mod k 个时间就是所有搬运完成的时间。
初始得分 50 分,因为没有用 long long 所以有些地方就挂了。
圆圈舞蹈
二分答案+前缀和
【问题描述】
熊大妈的奶牛在时针的带领下,围成了一个圆圈跳舞。由于没有严格的教育,奶牛们之间的间隔不一致。
奶牛想知道两只最远的奶牛到底隔了多远。奶牛A 到B 的距离为A 顺时针走和逆时针走,到达B的较短路程。告诉你相邻两个奶牛间的距离,请你告诉奶牛两只最远的奶牛到底隔了多远。
【输入】
第一行一个整数N,表示有N 只奶牛。(2≤N≤100000)
接下来2~N+1 行,第I 行有一个数,表示第I-1 头奶牛顺时针到第I 头奶牛的距离。(1≤距离≤maxlongint,距离和≤maxlongint)
第N+l 行的数表示第N 头奶牛顺时针到第1 头奶牛的距离。
【解题过程】
首先想到的是枚举起点和终点,这样做的复杂度是 O(n^2),显然不够。
然后想到二分枚举答案。对于每个点,距其最远的点当然是在其对面,越接近其“正对面”答案就越优。所以可以顺序枚举起点 s,然后对于每个起点二分枚举终点 t,如果 s 到 t 的顺时针距离大于总距离的一半,那么就往左移一点;否则就往右移一点。这样不断逼近“正对面”就能找到最优解。
初始得分 50 分。由于对于二分枚举的两个边界掐得太紧导致边界没有被枚举到。
物流运输
动态规划+最短路
【问题描述】
物流公司要把一批货物从码头A运到码头B。由于货物量比较大,需要n天才能运完。货物运输过程中一般要转停好几个码头。物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格的管理和跟踪。由于各种因素的存在,有的时候某个码头会无法装卸货物。这时候就必须修改运输路线,让货物能够按时到达目的地。但是修改路线是—件十分麻烦的事情,会带来额外的成本。因此物流公司希望能够订一个n天的运输计划,使得总成本尽可能地小。
【输入】第一行是四个整数n(l≤n≤100)、m(l≤m≤20)、K和e。n表示货物运输所需天数,m表示码头总数,K表示每次修改运输路线所需成本。接下来e行每行是一条航线描述,包括了三个整数,依次表示航线连接的两个码头编号以及航线长度(>0)。其中码头A编号为1,码头B编号为m。单位长度的运输费用为1。航线是双向的。再接下来一行是一个整数d,后面的d行每行是三个整数P(1<P<m),a,b(1≤a≤b≤n)。表示编号为P的码头从第a天到第b天无法装卸货物(含头尾)。同一个码头有可能在多个时间段内不可用。但任何时间都存在至少一条从码头A到码头B的运输路线。
【解题过程】
一开始以为是贪心,但是没有找到合适的贪心策略,而且越发感觉贪心不可行。
然后转向搜索,枚举每天走哪条路径,复杂度太高,时间不够也没写完。
初始得分 0 分。
正解是用动态规划,用 g(i, j) 表示从第 i 天到第 j 天一直连通的最短路(spfa),用 f(i) 表示从第一天到第 i 天所需的成本,则
f(i) = min{ f(j)+g(i+1, j)+k, 0<=j<i }
边界 f(0) = -k (为了消去 f(1) 中多余的 k)
01day2的更多相关文章
随机推荐
- javaZIP压缩文件
问题描述: java ZIP压缩文件 问题解决: 说明: 防止创建压缩文件中中文乱码,需要导入的包: (1)创建ZipOutputStream 注: 以上引用o ...
- Log4Net 日志配置[附带源码]
前述 园子里有许多人对log4net这款开源的日志记录控件有很多介绍.在这里个人再做一次总结,希望对以后有所帮助,需要的时候可以直接使用,减少查阅资料的时间.利用log4net可以方便地将日志信息记录 ...
- 基于HOOK和MMF的Windows密码渗透技术
随着计算机与网络的普及,信息安全越来越成为人们所普遍关心的大事.密码的渗透与反渗透在此领域表现的愈演愈烈.本文深入分析了各个版本Windows密码的特点,尤其是针对windws2K/XP安全性提高的情 ...
- ubuntu下opencv 3.0和python2.7安装测试
1.安装opencv所需的库(编译器.必须库.可选库) sudo apt-get install build-essential sudo apt-get install cmake git libg ...
- IT 基础设施
http://www.cnblogs.com/wintersun/p/4355267.html
- struts2学习笔记(2)——简单的输入验证以及标签库的运用
struts2自带了一些标签库,运用好这些标签库会减少开发周期. 1.struts2标签库是在哪定义的? struts2标签库定义在struts2-core-2.1.8.jar这个文件中,具体在这个j ...
- PowerDesigner修改设计图中文字的字体大小等样式
设计图中默认的字体是对英文比较合适的,中文就看不清楚了,特别不美观.但是可以通过修改“Display Preferences”适应我们的汉字. 我使用的PowerDesigner版本是15.1(测试版 ...
- lintcode:合并排序数组 II
题目: 合并排序数组 II 合并两个排序的整数数组A和B变成一个新的数组. 样例 给出A = [1, 2, 3, empty, empty] B = [4,5] 合并之后A将变成[1,2,3,4,5] ...
- java io异步
1.一般来说,可以通过多线程的方式来实现异步 2.同步和异步着重点在于多个任务的执行过程中,一个任务的执行是否会导致整个流程的暂时等待: 3.而阻塞和非阻塞着重点在于发出一个请求操作时,如果进行操作的 ...
- WIN7中因为服务进程是运行在session0下面的~~第一个登录的用户session为1(WTSGetActiveConsoleSessionId取得session的Id,OpenProcessToken取得进程的令牌)
procedure TsvrExamCtrl.ServiceStart(Sender: TService; var Started: Boolean);var CMD: string;begin ...