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的更多相关文章
随机推荐
- 一个很吊的swing循环生成窗口。
import javax.swing.*; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; publi ...
- Chp4: Trees and Graphs
1.Type of Tree 1. Binary Tree: a binary tree is a tree in which each node has at most two child node ...
- POJ 3641
Pseudoprime numbers Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6044 Accepted: 24 ...
- POJ 3421
X-factor Chains Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5111 Accepted: 1622 D ...
- UVA 10246 Asterix and Obelix
题意:每个城市举办庆祝有一定的花费,A在路径上会选择庆祝花费最大的城市 让你求,A回家所花的路费和庆祝费最少,也就是说并不是最短路径就是结果, 还有可能就是路费比最短路径的多,但是庆祝费就比它的少,总 ...
- POJ 3461 Oulipo(字符串匹配,KMP算法)
题意:给出几组数据,每组有字符串W和T,问你W在T中出现几次. 思路:字符串长度很大,用KMP算法. 一开始写的是:调用KMP算法查找W在T中是否匹配,若匹配,则个数+1.则接下来T的索引移动相应的距 ...
- SDUT1574组合数的计算(组合数)
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1574 这个题,比较奇怪,是用递推去做的,我试了 ...
- 【Linux高频命令专题(20)】du
概述 显示每个文件和目录的磁盘使用空间. 命令格式 du [选项][文件] 文件缺省就代表当前目录大小 参数 -a或-all 显示目录中个别文件的大小. -b或-bytes 显示目录或文件大小时,以b ...
- phpmyadmin导入大sql文件失败解决办法
摘自:http://www.xunway.com/info/post/499.asp 昨天小编的一个客户在在利用phpmyadmin导入大sql文件的时候,总是提示错误,反应给小编,小编也是第一次遇到 ...
- Sina App Engine(SAE)入门教程(5)- SaeSegment(中文分词服务)使用
分词能干什么? 提取一篇文章的关键字 检测特定的段落中有没有违禁词 智能机器人 …..尽你所想 开启SAE 分词服务 首先你需要在sae的管理面板开始分词服务后才能使用sae的服务.具体的开启操作: ...