小明搬家

题目描述

小明要搬家了,大家都来帮忙。

小明现在住在第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层的人一定正不拿箱子向下走。

输出

仅包含一个整数,为搬完箱子的时间。

题解

这道题乍一看是没有头绪的。。。这道题目的要求很奇怪,似乎要用动态规划来做。但是又想不出来怎么动归,怎么办呢?

注意一开始有m个箱子,k个搬运工,楼高是n层。要把一个箱子从一楼搬到n楼明显要搬n-1楼,因为无论怎么样,都需要花费一个人的人力上到n层,再下来,那么就相当于一个人搬上搬下一次,多人搬运一件物品并不会减少时间。先忽略每个人手中已有的盒子数,那么要等到人都下到1层才能开始搬运,这时可以计算出从初始状态开始分别需要多少时间每个人都回到1层,记为delay[i]=eval('measure how many minutes %d-th worker is going back to the first floor',i)。

从这时开始,过2(n-1)分钟就可以运走k个盒子,最后一个运走盒子的搬运工的delay值就是delay[m mod k]。最后的答案就是2 floor(m/k)(n-1)+delay[m mod k],delay[0]=delay[m]-2(n-1)

圆圈舞蹈

题目描述

熊大妈的奶牛在时针的带领下,围成了一个圆圈跳舞。由于没有严格的教育,奶牛们之间的间隔不一致。

奶牛想知道两只最远的奶牛到底隔了多远。奶牛A到B的距离为A顺时针走和逆时针走,到达B的较短路程。告诉你相邻两个奶牛间的距离,请你告诉奶牛两只最远的奶牛 到底隔了多远。

输入

第一行一个整数N,表示有N只奶牛。(2≤N≤100000)

接下来2~N+1行,第I行有一个数,表示第I-1头奶牛顺时针到第I头奶牛的距离。(1≤距离≤maxlongint,距离和≤maxlongint)

第N+l行的数表示第N头奶牛顺时针到第1头奶牛的距离。

输出

一行,表示最大距离。

题解

最简单的解法当然是模拟了。纯模拟的时间复杂度为O(n3),这道题数据很大,过不了。有一点简单的优化是前缀和优化,可以把复杂度降到O(n2)。很可惜,还是过不了。

想想有没有别的办法?可不可以先二份答案再检验是否可行?如何检验?枚举起点,二分中点。(你可以试试这个办法)这个时间复杂度为O(n log22 n)。但是既然都这么检验了,干嘛不直接输出解?时间复杂度为O(n log2 n)。这时已经可以过了。还能再优化吗?

注意到我们只是要找最大的距离,就维护一个头指针指向当前扫描到的牛,尾指针指向离他最远的牛。显然当我们处理过i-1号牛后,头与尾的距离缩短了。试试此时头尾的距离值是不是比dist(head,tail+1)小。如果是的,就++tail,反复做下去直到不是为止。将这时的dist(head,tail)和maxDist比较并更新maxDist的值。tail和head的值都小于等于n,相当于这两个指针各走了一圈。时间复杂度O(n)。

物流运输(BZOJ 1003)

我都不敢相信这是一道ZJOI的题目,毁三观的难度。。。

就是一个简单的最短路+DP,不过不大好写。

F[i]=min{(for all F[j] which{0<j<i} + Dist(1,e){while applying all point ignoring between day j and day i}*(i-j)+k),dist(1,e){w a a p i b d 1 a d i}}

二模Day2题解的更多相关文章

  1. 二模 (8) day2

    第一题: 题目描述: 有 n 个炸弹,有些炸弹牵了一根单向引线(也就是说引线只有在这一端能被炸弹点燃),只要引爆了这个炸弹,用引线连接的下一个炸弹也会爆炸.每个炸弹还有个得分,当这个炸弹被引爆后就能得 ...

  2. 二模13day1解题报告

    二模13day1解题报告 T1.发射站(station) N个发射站,每个发射站有高度hi,发射信号强度vi,每个发射站的信号只会被左和右第一个比他高的收到.现在求收到信号最强的发射站. 我用了时间复 ...

  3. [18/12/3]蓝桥杯 练习系统 入门级别 Fibonacci数列求模问题 题解思路

    前言略. 看到这个题目本来应该很高兴的,因为什么,因为太TM的基础了啊! 可是当你用常规方法尝试提交OJ时你会发现..hhh...运行超时..(开心地摇起了呆毛 //Fibonacci数列递归一般问题 ...

  4. 二模 (13)day2

    第一题: 题目大意: 给出一个N*M的矩阵,定义一条路径的权值为经过的所有点权值的最大值.求一条从第一行到第N行的路径,使得路径权值最小. N,M<=1000 矩阵内点的权值小于1000. 解题 ...

  5. 二模 (12)day2

    第一题: 题目大意: 有N颗糖,两个人轮流取,每次只能取质数颗,不能取的输.求先取者若必胜,最少需要多少步胜利.(N<=10000) 解题过程: 1.看到N的范围比较小,先打个素数表,然后dp即 ...

  6. 二模 (9) day2

    第一题: 题目大意:求满足条件P的N位二进制数的个数.P:该二进制数有至少3个0或者3个1挨在一起.. N<=20000 解题过程: 1.一开始直接写了个dfs把表打了出来,不过没发现什么规律, ...

  7. 二模 (3) day2

    第一题: 题目大意:(难以概括,就不贴了把.) 解题过程: 1.担心被精度问题恶心,就把平均数的地方乘了N,这样只有最后计算的时候才会是小数.. 2.数组保存的时候蛋疼的 没改成double.结果全部 ...

  8. 二模 (16) day1&day2

    第一题:题目大意: 数列a[0]=a[1]=1, a[n]=a[n-2]*a[n-1]*n,求a[n]的因子个数 mod 1000000007.  n<=1000000 解题过程: 1.递推式还 ...

  9. 二模 (15)day2

    第一题:Alice和Bob两个人正在玩一个游戏,游戏有很多种任务,难度为p的任务(p是正整数),有1/2p 的概率完成并得到2p−1分,如果完成不了,得0分.一开始每人都是0分,从Alice开始轮流做 ...

随机推荐

  1. AngularJS开发指南16:AngularJS构建大型Web应用详解

    AngularJS是由Google创建的一种JS框架,使用它可以扩展应用程序中的HTML功能,从而在web应用程序中使用HTML声明动态内容.在该团队工作的软件工程师Brian Ford近日撰写了一篇 ...

  2. WRONGTYPE Operation against a key holding the wrong kind of value

    今天改动代码,一运行就跑错了,错误原因: 因为redis中已经存在了相同的key, 而且key对应的值类型并不是Set,而是SortSet(改动前):再调用smembers时,抛出此错误. 解决方法: ...

  3. simple-LDAP-auth / ldap_auth.php

    <?php /** * simple class for LDAP authentification * Copyright (C) 2013 Petr Palas This program i ...

  4. iOS开发小技巧--初始化项目中修改APP安装后的名称

  5. maven初学(二)archeType插件使用

    archeType是一个maven插件,它的主要功能是根据模板来创建工程结构 创建工程结构: 1,创建工程目录 2,输入命令:mvn archetype:generate 3,选择需要的archety ...

  6. Linux operation strucutre

    Under the /usr/src directory. 1.arch目录包括了所有和体系结构相关的核心代码.它下面的每一个子目录都代表一种Linux支持的体系结构,例如i386就是Intel CP ...

  7. CVE: 2014-6271、CVE: 2014-7169 PATCH方案分析

    目录 . RedHat官方给的PATCH第一套方案 . RedHat官方给的PATCH临时方案 . RedHat官方给的PATCH第二套方案 1. RedHat官方给的PATCH第一套方案 0x1: ...

  8. C#获得系统打开的端口和状态

    实际是通过c#编程方式调用了CMD命令行,然后调用netstat命令,然后将CMD命令的输出流转到了C#控制台程序上.也可以将结果输出到文件. using System; using System.C ...

  9. PL/0编译器(java version) - Err.java

    1: package compiler; 2:   3: import java.io.BufferedWriter; 4:   5: public class Err { 6:   7: publi ...

  10. 从js的repeat方法谈js字符串与数组的扩展方法

    js将字符串重复N次的repeat方法的8个版本 /* *@desc: 将一个字符串重复自身N次 */ //版本1:利用空数组的join方法 function repeat(target, n) { ...