noip2008提高组题解
第一题:笨小猴
模拟
第二题:火柴棒等式
搜索
深搜不用说,确定出两个加数然后判断能否拼出等式。
枚举确实不太好搞,因为枚举范围不确定,太大了容易超时,太小了容易漏解。不过这题的数据貌似很温和,我从 0~1000 枚举也能过。
第三题:传纸条
多线程动态规划
跟 2000 年的方格取数很像。
还是看做两个人同时从左上角走到右下角。用 f(i, j, k) 表示横纵坐标和为 i,第一个人的行坐标为 j,第二个人的行坐标为 k 时的最大和。
由于一个地方不能走两次,所以对于除了终点以外的所有 j = k 的情况,其 f 值应等于负无穷。(j=k && i!=m+n && j!=m 才是终点的情况)
第四题:双栈排序
二分图判定
首先想到的是贪心,能拿 30~50 分左右。
然后看了下题解。(参考 https://www.byvoid.com/blog/noip2008-twostack/ 和 http://www.cnblogs.com/vb4896/p/3875833.html )
首先我们要判断一个序列能否进行双栈排序。两个栈,容易让人想到二分图。按照这个思路往下想,二分图中的边所代表的关系很明显是指两个数字不能进同一个栈。那么如何判断两个数字能否进同一个栈?
对于任意的数对 (i, j) 满足i<j且a[i] < a[j],若存在 k 使得 k > j > i 且 a[k] < a[i] < a[j],则 i 和 j 必然不能进入同一个栈。(简单解释一下:因为 k 在 i 和 j 的后面,所以在 k 出栈之前 i 和 j 都在栈内,如果 i 和 j 在同一个栈内,j 必然比 i 后入栈,也必然比 i 先出栈,这样就违背了应有的顺序,所以 i 和 j 不能在同一个栈内)
那么我们只需对于满足上述条件的数对 (i, j) 连一条边,最后染色判断是不是一个二分图即可。
判断数对 (i, j) 是否满足条件,如果用朴素的算法,时间复杂度将是 O(n)。我们每次判断的过程事实上是判断在 j 后面的数字中能否找到一个小于 a[i] 的数字。那么我们只需知道 a[j+1]...a[n] 中的最小值即可。用 f[i] 表示 a[i]...a[n] 中的最小值,则 f[i] = min{ f[i+1], a[i] }。每次对于 (i, j) 只要判断 f[j+1] 是否小于 a[i] 即可。复杂度 O(1)。
由于我们要得到字典序最小的方案,那么很明显应该尽量将顺序靠前的数字安排在栈 1 中。
如果得到的是二分图,进行贪心即可。每次如果可以进行多种操作,选择字典序最小的操作。
(顺便一提,BYVoid 大神的代码是有问题的,可以参加那篇文章下面的第一条评论。)
noip2008提高组题解的更多相关文章
- NOIP2008提高组(前三题) -SilverN
此处为前三题,第四题将单独发布 火柴棒等式 题目描述 给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A.B.C是用火柴棍拼出的整数(若该数非零,则最高位不能是0).用火柴棍拼数字0 ...
- NOIP2008普及组题解
NOIP2008普及组题解 从我在其他站的博客直接搬过来的 posted @ 2016-04-16 01:11 然后我又搬回博客园了233333 posted @ 2016-06-05 19:19 T ...
- noip2010提高组题解
NOIP2010提高组题解 T1:机器翻译 题目大意:顺序输入n个数,有一个队列容量为m,遇到未出现元素入队,求入队次数. AC做法:直接开1000的队列模拟过程. T2:乌龟棋 题目大意:有长度为n ...
- NOIP 2014 提高组 题解
NOIP 2014 提高组 题解 No 1. 生活大爆炸版石头剪刀布 http://www.luogu.org/problem/show?pid=1328 这是道大水题,我都在想怎么会有人错了,没算法 ...
- NOIP 2001 提高组 题解
NOIP 2001 提高组 题解 No 1. 一元三次方程求解 https://vijos.org/p/1116 看见有人认真推导了求解公式,然后猥琐暴力过的同学们在一边偷笑~~~ 数据小 暴力枚举即 ...
- NOIP 2000 提高组 题解
NOIP2000 提高组 题解 No 1. 进制转换 https://www.rqnoj.cn/problem/295 水题 对于n和基数r, 每次用n mod r, 把余数按照逆序排列 注意 mod ...
- 【NOIP2018】提高组题解
[NOIP2018]提高组题解 其实就是把写过的打个包而已 道路铺设 货币系统 赛道修建 旅行 咕咕咕 咕咕咕
- NOIP2008普及组 题解 -SilverN
T1 ISBN号码 题目描述 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字.1位识别码和3位分隔符, 其规定格式如“x-xxx-xxxxx-x”,其中符号“-”就是分隔符( ...
- [NOIP2008] 提高组 洛谷P1006 传纸条
题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是 ...
随机推荐
- css的transition 属性
把鼠标指针放到 div 元素上,其宽度会从 100px 逐渐变为 300px: div { width:100px; transition: width 2s; -moz-transition: wi ...
- 【BZOJ】【1934】【SHOI 2007】Vote 善意的投票
网络流/最小割 简单题= =直接利用最小割的性质: 割掉这些边后,将所有点分成了两部分(两个连通块),我们可以假定与S相连的是投赞成票,与T相连的是投反对票. 那么如果一个小朋友原本意愿是睡觉,那么连 ...
- 【UVA】【11427】玩纸牌
数学期望 也是刘汝佳老师白书上的例题……感觉思路很神奇啊 //UVA 11427 #include<cmath> #include<cstdio> #include<cs ...
- 阿里云CentOS6.3 安装MongoDB教程
安装说明 系统环境:Centos-6.3安装软件:mongodb-linux-x86_64-2.2.2.tgz下载地址:http://www.mongodb.org/downloads安装机器:192 ...
- 【Asp.net MVC ---杂七杂八】
@RenderSection 母模板:_mainLayout.cshtml <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitio ...
- 【面试题021】包含min函数的栈
[面试题021]包含min函数的栈 MinStack.cpp: 1234567891011121314151617181920212223242526272829303132333435363738 ...
- What is Object Oriented Design? (OOD)
Object Oriented Design is the concept that forces programmers to plan out their code in order to hav ...
- sql 判断两个时间段是否有交集
本文转自CSDN 链接地址:http://blog.csdn.net/dasihg/article/details/8450195 时间段:starttime_1到endtime_1,starttim ...
- java基础知识回顾之---java String final类普通方法的应用之“按照字节截取字符串”
/*需求:在java中,字符串“abcd”与字符串“ab你好”的长度是一样,都是四个字符.但对应的字节数不同,一个汉字占两个字节.定义一个方法,按照最大的字节数来取子串.如:对于“ab你好”,如果取三 ...
- hdu 2582 f(n) 数学
打表找规律: 当n为质数是,GCD(n)=n; 当n为质数k的q次方时,GCD(n)=k; 其他情况,GCD(n)=1. 代码如下: #include<iostream> #include ...