03day2
03day1 不说了,图论题因为没有把加边的过程放到循环里导致只有 10 分。(不要吐槽我啊。。。)
竞赛排名
排序
【问题描述】


【输入】
文件的第一行为参赛总人数 N(1≤N≤1000),从第二行到第 N 行依次为编号 1 到编号为 N 的选手的成绩,每行有 8 个 0~100 之间的整数,代表该选手的 8 项竞赛成绩 Xi1,Xi2,…,Xi8。同一行相邻两个数之间用一个空格符隔开。
【解题过程】
看题目用了好久。只要能理解题意基本上没问题。(至于 lzw 大神把数据类型设成 long long 我也是醉了)关于 double 型数据的比较,最好还是允许一个 1e-5 左右之内的误差吧。(话说我直接用等号水过去了真是奇迹)
1次 AC。
奶牛晒衣服
贪心
【问题描述】
在熊大妈英明的带领下,时针和它的同伴生下了许多牛宝宝。熊大妈决定给每个宝宝都穿上可爱的婴儿装。于是,为牛宝宝洗晒衣服就成了很不爽的事情。
圣人王担负起了这个重任。洗完衣服后,你就要弄干衣服。衣服在自然条件下用 1 的时间可以晒干 A 点湿度。抠门的熊大妈买了 1 台烘衣机。使用烘衣机可以让你用 1 的时间使 1 件衣服除开自然晒干的 A 点湿度外,还可烘干 B 点湿度,但在 1 的时间内只能对 1 件衣服使用。
N 件的衣服因为种种原因而不一样湿,现在告诉你每件衣服的湿度,要你求出弄干所有衣服的最少时间(湿度为 0 为干)。
【输入】
第一行 N,A,B;接下来 N 行,每行一个数,表示衣服的湿度(1≤湿度,A,B≤500000,1≤N≤500000)。
【解题过程】
很明显对于剩余时间最长的那件衣服使用烘干机是最优的选择。那么就用堆来维护所有的时间,每次弹出堆顶元素并更新值再压回去即可。不用每次把每个元素减去 A,只要累加 A 然后与堆顶比较就能知道是否所有衣服都已经烘干。
1 次 AC。500+ B 的代码让我怀疑自己是不是看错了题目。STL 威武。
奶牛排队
分治或二分答案/RMQ
【问题描述】
奶牛在熊大妈的带领下排成了一条直队。
显然,不同的奶牛身高不一定相同……
现在,奶牛们想知道,如果找出一些连续的奶牛,要求最左边的奶牛 A 是最矮的,最右边的 B 是最高的,且 B 高于 A 奶牛,中间如果存在奶牛,则身高不能和 A、B 奶牛相同。问这样的奶牛最多会有多少头?
从左到右给出奶牛的身高,请告诉它们符合条件的最多的奶牛数(答案可能是 0,2,但不会是 1)。
【输入】
第一行一个数 N (2≤N≤l00000),表示奶牛的头数。
接下来 N 个数,每行一个数,从上到下表示从左到右奶牛的身高(1≤身高≤maxlongint)。
【解题过程】
晚自习的时候没想出来。
看到数据范围的第一反应是排序,又是序列又是区间的让人联想起临洮巨人那道题(http://www.cnblogs.com/lsdsjy/p/3909878.html),但是仔细分析发现不可行。
然后考虑二分答案。脑子一热就感觉可以二分区间长度然后枚举起点,判断一个区间是否可行可以用线段树或者 RMQ(只要开区间 (L, R) 中的最小值大于 A[L] 且区间最大值小于 A[R] 即可),但是因为 RMQ 好久没写了于是选择了线段树(脑子是有多热。。。)。
线段树很开心地写到一半猛然发现没有单调性。然后就卡住了,一直卡到下课。晚上也没睡着,在床上翻来覆去终于想出了算法:
对于一个左端点 L,我们可以找到一个右端点 R 使得区间 (L, R] 中的最小值大于 A[L] 且 R-L 达到最大。寻找右端点的过程是可以二分的,如果区间 (L, R] 中的最小值已经大于 A[L] 那么就不必继续往右找了。然后在区间 [L, R] 中找到最大值所在的位置 R',则区间 [L, R'] 必然就是以 L 为左端点的最长的满足题意的区间(注意判断 R' 是否大于 L)。
有一个需要注意的小细节是,最大值所在的位置可以用 RMQ 求,但是一定要保证当区间中有多个最大值时取左边的那个。(想一想,为什么?)(啊不要打我。)
接下来讲个正常的算法:
对于一个区间 [L, R],我们可以找出其最大值和最小值的位置,那么就会将这个区间分成三个部分,如下图

很明显如果 MIN 的位置在 MAX 的左边,那么区域 1 是一个可行的区间,与 ans 比较即可;如果 MIN 的位置在 MAX 的右边,那么区域 1 就不是可行的区域了,不用处理。
如果最优解区间不是 1 区域,那么最优解区间必然不会跨过 MIN 和 MAX 的位置,那么就是在 2 或 3 区域,递归处理。
但是花了好久才 AC,原因是 1. 二分枚举的时候边界掐得不好 2. RMQ 复制一遍的时候忘了改数组名了
(我自己滚吧。。。)
03day2的更多相关文章
随机推荐
- C++文件操作之get/getline
问题描述: C++ 读取写入文件,其中读取文件使用get和getline方式 参考资料: http://simpleease.blog.163.com/blog/stat ...
- 关于在js中使用csstext的问题
会将前边所设置的css属性全部清空,慎用!
- 腾讯QQ企业邮箱在ruby on rails 框架中的mailer配置
在编写ruby on rails程序时,我们可能会需要用到发送邮件的程序,如果使用gmail进行smtp发送一般问题不大,但很多企业使用的是腾讯QQ企业邮箱.使用该邮箱进行链接时出现各种错误,goog ...
- uva 1344
这本来是暑假集训做过的一个题 现在做来 就三种情况 1.田忌最快的比齐王最快的快 就用最快的比最快的 2.田忌最慢的比齐王最慢的快 就用最慢的比最慢的 3.上两种情况都不符合 用田忌最慢的去比齐王最快 ...
- 2014多校第一场J题 || HDU 4870 Rating(DP || 高斯消元)
题目链接 题意 :小女孩注册了两个比赛的帐号,初始分值都为0,每做一次比赛如果排名在前两百名,rating涨50,否则降100,告诉你她每次比赛在前两百名的概率p,如果她每次做题都用两个账号中分数低的 ...
- ubuntu 13.10 64bit装BeyondCompare
1. Beyond Compare官网下载amd-64位的,安装失败,依赖于ia32-libs,但是这个文件已经不在源里了: 2. 官网下载tar.gz源码包,解压安装失败: 3. 直接装32位的,可 ...
- lintcode :Ugly Numbers 丑数
题目 丑数 设计一个算法,找出只含素因子3,5,7 的第 k 大的数. 符合条件的数如:3,5,7,9,15...... 样例 如果k=4, 返回 9 挑战 要求时间复杂度为O(nlogn)或者O(n ...
- 漫谈C语言及如何学习C语言
抄自:http://my.oschina.net/apeng/blog/137911 目录:[ - ] 为什么要学习C语言? C语言学习方法 1,参考书籍 2,动手实验环境搭建 3,网络资源 附录 一 ...
- SQLite数据库的体系结构(翻译自sqlite.org)
$1 简介 本文档描述了SQLite库的体系结构,这些信息对那些想理解和修改SQLite的内部工作机制的人是有用的. 下图显示了SQLite的主要组成部件及其相互关系,下面的内容将描述每一 ...
- 用ISO C++实现自己的信号槽(Qt另类学习)
qtc++objectsignalclassstring 目录(?)[-] Qt信号与槽 引入元对象系统 建立信号槽链接 信号的激活 槽的调用 全家福 零零散散写在后面 Q_OBJECT Conn ...