第一题:笨小猴

模拟

 

第二题:火柴棒等式

搜索

深搜不用说,确定出两个加数然后判断能否拼出等式。

枚举确实不太好搞,因为枚举范围不确定,太大了容易超时,太小了容易漏解。不过这题的数据貌似很温和,我从 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提高组题解的更多相关文章

  1. NOIP2008提高组(前三题) -SilverN

    此处为前三题,第四题将单独发布 火柴棒等式 题目描述 给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A.B.C是用火柴棍拼出的整数(若该数非零,则最高位不能是0).用火柴棍拼数字0 ...

  2. NOIP2008普及组题解

    NOIP2008普及组题解 从我在其他站的博客直接搬过来的 posted @ 2016-04-16 01:11 然后我又搬回博客园了233333 posted @ 2016-06-05 19:19 T ...

  3. noip2010提高组题解

    NOIP2010提高组题解 T1:机器翻译 题目大意:顺序输入n个数,有一个队列容量为m,遇到未出现元素入队,求入队次数. AC做法:直接开1000的队列模拟过程. T2:乌龟棋 题目大意:有长度为n ...

  4. NOIP 2014 提高组 题解

    NOIP 2014 提高组 题解 No 1. 生活大爆炸版石头剪刀布 http://www.luogu.org/problem/show?pid=1328 这是道大水题,我都在想怎么会有人错了,没算法 ...

  5. NOIP 2001 提高组 题解

    NOIP 2001 提高组 题解 No 1. 一元三次方程求解 https://vijos.org/p/1116 看见有人认真推导了求解公式,然后猥琐暴力过的同学们在一边偷笑~~~ 数据小 暴力枚举即 ...

  6. NOIP 2000 提高组 题解

    NOIP2000 提高组 题解 No 1. 进制转换 https://www.rqnoj.cn/problem/295 水题 对于n和基数r, 每次用n mod r, 把余数按照逆序排列 注意 mod ...

  7. 【NOIP2018】提高组题解

    [NOIP2018]提高组题解 其实就是把写过的打个包而已 道路铺设 货币系统 赛道修建 旅行 咕咕咕 咕咕咕

  8. NOIP2008普及组 题解 -SilverN

    T1 ISBN号码 题目描述 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字.1位识别码和3位分隔符, 其规定格式如“x-xxx-xxxxx-x”,其中符号“-”就是分隔符( ...

  9. [NOIP2008] 提高组 洛谷P1006 传纸条

    题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是 ...

随机推荐

  1. JS实现Web网页打印功能(IE)

    问题描述:     JS实现Web网页打印功能 问题解决:     这里主要使用WebBrowser控件的ExeWB在IE中打印功能的实现 WebBrowser介绍:         WebBrows ...

  2. DIV+CSS高手必知的15个CSS常识

    1.不要使用过小的图片做背景平铺.这就是为何很多人都不用 1px 的原因,这才知晓.宽高 1px 的图片平铺出一个宽高 200px 的区域,需要 200*200=40, 000 次,占用资源. 2.无 ...

  3. json封装与解析

    #include <iostream> #include <boost/property_tree/ptree.hpp> #include <boost/property ...

  4. [C/CPP系列知识] C++中extern “C” name mangling -- Name Mangling and extern “C” in C++

    http://www.geeksforgeeks.org/extern-c-in-c/ C++函数重载(function overloading),但是C++编译器是如何区分不同的函数的呢?----是 ...

  5. EBP的妙用[无法使用ESP定律时]

    1.了解EBP寄存器 在寄存器里面有很多寄存器虽然他们的功能和使用没有任何的区别,但是在长期的编程和使用 中,在程序员习惯中已经默认的给每个寄存器赋上了特殊的含义,比如:EAX一般用来做返回值,ECX ...

  6. 2013山东省ICPC结题报告

    A.Rescue The Princess 已知一个等边三角形的两个顶点A.B,求第三个顶点C,A.B.C成逆时针方向. 常规的解题思路就是用已知的两个点列出x,y方程,但这样求出方程的解的表达式比较 ...

  7. D&F学数据结构系列——红黑树

    红黑树 定义:一棵二叉查找树如果满足下面的红黑性质,则为一棵红黑树: 1)每个结点不是红的就是黑的 2)根结点是黑的 3)每个叶结点是黑的 4)如果一个结点是红的,它的两个儿子都是黑的(即不可能有两个 ...

  8. JsRender系列demo(3)-自定义容器

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  9. POJ1046Color Me Less

    http://poj.org/problem?id=1046 据说这个题是个水题,但我还是WA了好几次,最后才改对了 #include<cstdio> #include<cstrin ...

  10. *[codility]MissingInteger

    今天开始刷刷codility上respectable的题目,难度适中. https://codility.com/demo/take-sample-test/missing_integer 本题是找出 ...