04 2011 档案

摘要:题目2010年辽宁OI选拔赛题目一、洪水我们知道,全球变暖使得海平面上升。OI小岛的岛主请OIer们解答水位达到多高时,该岛将会变成两个或更多的岛。输入文件“flood.in”给出小岛的高度网格数据:文件第一行为两个不超过100的正整数n和m,表示网格的维度。随后为n行数据,每行有m个不超过1000整数,表示网格节点的原始高度。网格最外圈的数据0及与其相邻的0表示最初的海平面。和外圈不相连的0是被高地包围的海平面高度。假定海洋最初围绕给定的网格,小岛初始时是连通的。输出文件“flood.out”Island splits when ocean rises f feet.或者Island nev 阅读全文
posted @ 2011-04-28 08:58 liukee 阅读(201) 评论(0) 推荐(0)
摘要:问题给定你一个数n,让你找出一个能被n整除的由0和1组成的十进制数。存在多解输出任一个分析一看到题就感觉是数论,但是不存在这样的定理。所以想到了搜索,为了尽可能早的搜到,采取宽度优先搜索。那么如何表示状态和判重呢。如果两个数对n的余数相等,我们可以认为这是一个状态,根据同余定理: (a*10) mod n=((a mod n)*10 )mod n (a*10+1)mod n=((a mod n)*10+1)mod n所以每次只需对余数计算即可,从首位开始搜索,共需搜索n个状态,直到余数等于零。codeprogram liukee;type pig=record num:int64; ys:lo 阅读全文
posted @ 2011-04-19 12:07 liukee 阅读(268) 评论(0) 推荐(0)
摘要:问题给定你一个数列,a1~an,其中n<=100005,给定m(M<=50000)个形如“x y k”的询问,让你输出x到y这段区间中第k小的数是多少。分析如果用快排,时间复杂度是nmlogn一定会超时,那么只好用二叉排序树进行动态维护,时间复杂度接近mlogn,但是单纯的bst还是很有可能超时,所以用treap维护这棵平衡树。基于贪心的思想,尽量少的对树进行操作,对区间的首端点排序,之后按顺序对每个区间进行操作,如果当前区间的数不在已构树中,就加入这些新节点,如果树中多出不在区间中的节点则删去。这样操作m次即可。只需对最基本的平衡树操作多开一个域,记录一个节点的左边有多少儿子即比 阅读全文
posted @ 2011-04-15 17:00 liukee 阅读(602) 评论(1) 推荐(0)
摘要:Treap的构建和使用BY liukeke一、定义叶子我没有找到定义,只是满天飞的人们提到的词,Treap=Tree+Heap,就是让二叉排序树在Heap的规则下进行一些简单的翻转,由于Heap翻转所以靠的关键字段Aux是随机生成的,所以在满足BST的同时,平衡又是随即建立起来的,消除了BST由于有序数据的插入退化的情况,所以Treap在有些地方也被称作随机二叉树(Randomize Binary Sort Tree)在Treap的翻转中,只有两种翻转:左旋和右旋,比起AVL树和扩展树(Splay Tree)的翻转要简单得多,少得多,很容易掌握。而且由于随机化,不会出现退化现象,平均的插入、删 阅读全文
posted @ 2011-04-14 09:15 liukee 阅读(979) 评论(0) 推荐(0)