数据结构
文章平均质量分 54
miss_minor
坚持,请你坚持
展开
-
10305 - Ordering Tasks(拓扑序列)
题目:10305 - Ordering Tasks题目大意:给出几个任务的先后顺序,推出可能的排序。解题思路:1,找出没有前驱,且没有访问过的点,放在拓扑序列的头部,,,2,删掉他所有想关连的边,并标记访问过。再次找出没有前驱的点,重复前面两个步骤,直到所有的点都访问过位置,输出拓扑序列。#include#includeconst int N = 105;int原创 2014-02-11 21:30:08 · 603 阅读 · 0 评论 -
UVALive - 5908(UVA1517)Tracking RFIDs(暴力)
UVALive - 5908(UVA1517)Tracking RFIDs(暴力)题目链接题目大意:给你S个传感器,然后每个传感器的感应半径是R,有W堵墙,已经传感器的感应范围会因为碰到一堵墙而减少1,那么如果这个感应器和某个物品中间有N堵墙的话,感应范围就变为R - N。给你P个物品,要求你求出每个物品可以被哪些感应器感应到。解题思路:因为这题的S很大,P比较小,而且传感原创 2014-09-24 11:18:20 · 1142 阅读 · 1 评论 -
UVA11995I Can Guess the Data Structure!(stack + queue + priority_queue)
题目:UVA11995I Can Guess the Data Structure!(stack + queue + priority_queue)题目大意:给你两种指令,1代表让1后面的数字进入这个数据结构,2代表无差错的从数据结构中取出这个数字,问这个数据结构是stack还是queue还是priority_queue,还是不确定,还是以上均不可能。解题思路:用STL中的原创 2014-09-05 09:39:13 · 686 阅读 · 0 评论 -
UVA11991Easy Problem from Rujia Liu?(map + vector)
题目:UVA11991Easy Problem from Rujia Liu?(map + vector)题目大意:给你N个数字,这些数字可能有重复,然后M个查询,问第k个V的下标是,如果不存在这样的数字输出0。解题思路:用map来将每个数字和下标做一一映射,但是因为相同数字会出现多次,所以需要一个数组,并且长度不一定,所以用vector。代码:#inclu原创 2014-09-05 09:45:32 · 677 阅读 · 0 评论 -
UVA1203Argus(优先队列)
题目:UVA1203Argus(优先队列)题目大意:给你多个项目,每个项目有它发生的周期和对应的Q_num值。现在要求给出前K个项目,时间优先,同一时刻发生的先输出Q_num值小的。解题思路:先将这几个项目排下顺序,一开始这些项目的发生时间就是周期,按照时间优先和同一时刻的Q_num优先的原则将这个项目在priority_queue排下序,然后输出前K个。当输出某个项目的时原创 2014-09-05 09:51:31 · 659 阅读 · 0 评论 -
UVA11997K Smallest Sums(优先队列+二路归并)
题目:UVA11997K Smallest Sums(优先队列+二路归并)题目大意:求K个最小和。给出K行,每行有K个数,在每行中取一个元素相加,求这些和中最小的k的值。解题思路:每一行排列一下,那么对于两张表a1 b1原创 2014-09-09 09:43:25 · 796 阅读 · 0 评论 -
UVALive - 3644X-Plosives(并查集)
题目:UVALive - 3644X-Plosives(并查集)题目大意:给出K个简单的化合物,正好包含K种元素,那么将它们装车的时候,已经拿到的化合物再来的时候就应该拒绝装车,安全起见,然后给你装车的化合物列表,问你需要拒绝装车的次数。解题思路:并查集。将已经装过的化合物记录下来,那么如果下次的化合物如果已经在集合中了,就说明需要拒绝装车。代码:#incl原创 2014-09-09 10:05:09 · 810 阅读 · 0 评论 -
UVALive - 3027Corporative Network(带权并查集)
题目: UVALive - 3027Corporative Network(带权并查集)题目大意:有n和节点,初始时每个节点的父节点都不存在,然后有下面两种操作:I 操作 I a,b 将a的父节点变成b。E操作 E a,查询a到它的父节点的距离。解题思路:带权并查集。注意这里距离的变化是a -> b,那么a到根节点的距离就是a到b的距离的绝对值 % 1000 + b到它的根原创 2014-09-09 10:32:07 · 765 阅读 · 0 评论 -
UVA - 11988Broken Keyboard (a.k.a. Beiju Text)(链表)
题目: UVA - 11988Broken Keyboard (a.k.a. Beiju Text)(链表)题目大意:某位程序员在用坏掉的键盘打字,这个键盘的home键和end键会是不是自己打印。然后现在给出这样的一串文字,要求你打印出之后会在屏幕上显示的字符串。解题思路:home键是跳到这一行的开头开始打印,end键是跳到这一行的末尾开始打印。用一个链表将home和end原创 2014-09-10 09:42:14 · 933 阅读 · 0 评论 -
UVA - 11136Hoax or what(set)
题目:UVA - 11136Hoax or what(set)题目大意:超市举办一个活动,活动期间,凡是来到超市购物的客人将小票放到一个抽奖箱中,每天结束经理从中间抽出两张小票,一张最高的消费额,一张最低的消费额。然后最高消费的那位客人将获得max - min价值的商品。然后将这两张小票扔掉。活动期间都这么抽出幸运的顾客。问这个活动需要准备花多少钱在提供奖品上。解题思路:用原创 2014-09-10 09:51:44 · 752 阅读 · 0 评论 -
UVA - 10895Matrix Transpose(vector)
题目:UVA - 10895Matrix Transpose(vector)题目大意:给出一个矩阵求它的转置矩阵。解题思路:因为数组可以达到10000 * 10000 然后里面非0的数最多1000,所以用vector数组来存储。代码:#include #include #include using namespace std;const int原创 2014-09-11 10:27:29 · 806 阅读 · 0 评论 -
UVA10410 - Tree Reconstruction(队列)
题目:UVA10410 - Tree Reconstruction(队列)题目大意:给出一棵树的BFS和DFS遍历,求这棵数,如果有多种情况输出一种就可以了。解题思路:利用BFS将DFS串分段,分成一棵一棵子树。然后将子树用队列存储下来,因为先被分出来的子树,在下一层中也是最先被分段。注意:一定要将根节点分离出去,它不属于它的子树。这棵树不一定是二叉树。代码:原创 2014-09-11 10:35:55 · 1287 阅读 · 0 评论 -
UVA10588 - Queuing at the doctors(优先队列)
题目:UVA10588 - Queuing at the doctors(优先队列)题目大意:员工体检:总共有M个医生,每个医生每一秒接待一位员工,然后每个员工都有一份检查列表,上面的检查顺序要被严格的执行,问这样检查最后一个员工离开诊所的时间。解题思路:队列模拟,用优先队列来储存每个office的客人列表,记录进来的时间和序号。时间相同的序号小的优先,否则时间早的优先。然原创 2014-09-11 10:44:07 · 801 阅读 · 0 评论 -
UVA246 - 10-20-30(队列+ 模拟)
题目:UVA246 - 10-20-30(队列+ 模拟)题目大意:给出52张牌,不分花色,先原创 2014-09-12 10:12:08 · 1265 阅读 · 0 评论 -
UVA536 - Tree Recovery(递归)
题目:UVA536 - Tree Recovery(递归)题目大意:给出一棵二叉树的前序遍历和中序遍历,求后序遍历。解题思路:根据前序遍历将中序遍历的序列分成一棵棵子树,知道这个子树只有一个节点,然后就可以将它按顺序放到后序数组值中了。代码:#include #include const int N = 30;char preord[N], inor原创 2014-09-12 10:13:55 · 935 阅读 · 0 评论 -
UVA514 - Rails(栈)
题目:UVA514 - Rails(栈)题目大意:某城市有一个火车站,铁轨成Y字形,有n节车厢从A方向驶入车站,按进站顺序编号1-n,现在给你一个序列代表进入B的顺序,你可以借助一个C中转站,问能否可以按这样的序列驶入B。解题思路:栈模拟,中转站就代表栈,将车厢入栈后,只能从栈顶一个一个出去。注意输出每个cas都有一个空行。代码:#include #inc原创 2014-09-13 19:23:40 · 1252 阅读 · 0 评论 -
UVA1428 - Ping pong(树状数组)
UVA1428 - Ping pong(树状数组)题目链接题目大意:有N个人,每个人都有一个技能值ai,现在要开展乒乓球比赛,要求要有两个选手和一个裁判,要求裁判需要在两名选手的中间而且技能值也是在两名选手的中间,问可以开展多少场比赛。解题思路:对于第i个选手当裁判的话,设它前面位置的选手有ci个技能值比它低的,那么就有i - 1 - ci个比它高的,对于第i选手后面的位置原创 2014-09-26 09:06:07 · 1044 阅读 · 0 评论 -
UVA501 - Black Box(vector + lower_bound)
UVA501 - Black Box(vector + lower_bound)题目链接题目大意:给你两种操作:Add num,将一个数加入黑盒子中,原本的黑盒子是空的。并且X = 0.Get就是把X自增1,然后取出第X小的数。题目给的u序列的意思是在第Ui个数加入黑盒子后然后执行get操作。解题思路:用vector来存放,这样能够实现随机取出第i小的数。然后用lowe原创 2014-09-24 09:18:44 · 906 阅读 · 0 评论 -
UVA11235 - Frequent values(BMQ)
UVA11235 - Frequent values(BMQ)题目链接题目大意:可以一串不递减的序列,然后给你一个范围L,R,要求你返回L,R出现最多次的那个值的出现次数。解题思路:将这个序列重新编码一下,把相同的数字标记成一段,然后用num记录是哪一段,用cnt记录一下出现了多少个相同的。然后查询的时候因为可能出现从一段中的某个部分开始的情况,所以要先将头和尾处理一下,标原创 2014-09-26 09:14:40 · 781 阅读 · 0 评论 -
196 - Spreadsheet(dfs)
题目:196 - Spreadsheet题目大意:就是电子表格,有的有数字,有的有公式, 要求最后输出的都是数字,公式用相等的数字代替。解题思路:首先要处理后面的公式,一点都不好处理,写了好久,然后就是计算公式,公式里面可能还会有公式,所以用dfs.注意判断的时候要两次判断,不能判断不行了就直接跳过,因为回来后就可以了。这题里面公式可能会有=10 + A1+ B1的,所原创 2014-02-20 21:27:30 · 633 阅读 · 0 评论 -
UVA1455 - Kingdom(并查集 + 线段树)
UVA1455 - Kingdom(并查集 + 线段树)题目链接题目大意:一个平面内,给你n个整数点,两种类型的操作:road x y 把city x 和city y连接起来,line fnum (浮点数小数点一定是0.5) 查询y = fnum这条直线穿过了多少个州和city。州指的是连通的城市。解题思路:用并查集记录城市之间是否连通,还有每个州的y的上下界。建立坐标y的原创 2014-10-21 11:24:18 · 914 阅读 · 0 评论 -
UVA1492 - Adding New Machine(扫描线)
UVA1492 - Adding New Machine(扫描线)题目链接题目大意:给你N∗M个格子,这些格子中某些格子是放了旧的机器,然后问现在要在这些格子放一台1∗M的新机器,问有多少种放法。解题思路:这题照样是可以转换成面积并来做,对于有旧机器(x,y)的格子,那么(x - M + 1,y)都是不可以放新机器的格子,还有从(H - M + 2,H)都是不可以放新机器的原创 2014-10-19 20:57:44 · 697 阅读 · 0 评论 -
HDU1542Atlantis(扫描线)
HDU1542Atlantis(扫描线)题目链接题目大意:给你n个覆盖矩形,问最后覆盖的面积。解题思路:将每个矩形拆成两条线段,一条是+1的,另一条是减1的,然后扫描先从上往下扫描,碰到加1的那条线段,那么这条线段范围内的节点的覆盖信息就+1,直到碰到减1这个线段范围内的节点的覆盖信息都需要减1。这样说可能理解不了,就可以画画矩形然后画下扫描线在理解理解。然后就是需要离散化原创 2014-10-19 15:19:00 · 1323 阅读 · 0 评论 -
UVA11983 - Weird Advertisement(扫描线)
UVA11983 - Weird Advertisement(扫描线)题目链接题目大意:给你n个覆盖矩形,问哪些整数点是被覆盖了k次。题目大意:这题和hdu1542是一个题型,但是这题求的是覆盖k次的点,所以pushup里面就要改一下,具体的看代码把,大概的意思就是每次都是通过下面的两个孩子节点的覆盖信息更新父节点的覆盖信息。然后这题也是需要离散化建树。比较需要注意的是这题原创 2014-10-19 15:38:30 · 1058 阅读 · 0 评论 -
UVA1513 - Movie collection(树状数组)
UVA1513 - Movie collection题目链接题目大意:给你一叠DV,编号1到n,1在最上面,n在最下面。然后现在给你m个操作,每次都指定一张CD,问要拿走这个CD需要挪走上面多少张CD,并且这个要拿走的CD放在这个叠CD的顶端。解题思路:将这些CD的上面有多少张CD用数状数组来存储,但是每次要移动的话就有点难办,所以每次移动就将这张CD的pos更新一下,将之原创 2014-10-08 10:42:36 · 1086 阅读 · 0 评论 -
UVA1406 - A Sequence of Numbers(树状数组)
UVA1406 - A Sequence of Numbers(树状数组)题目链接题目大意:给定N个数字,给两种操作:C x: 把这N个数字都加上x。Q x:查询这N个数里面有多少个数字和2^x取且大于0.最后把每个查询的结果求和作为答案。解题思路:查询与2^x取且为1,那么就意味这那个符合要求的数的第x位要是1。但是这里还有全部加上x的操作,可以用一个变量来记原创 2014-10-28 18:43:56 · 1015 阅读 · 0 评论 -
UVA11992 - Fast Matrix Operations(线段树区间修改)
UVA11992 - Fast Matrix Operations(线段树区间修改)题目链接题目大意:给你个r*c的矩阵,初始化为0。然后给你三种操作:1 x1, y1, x2, y2, v 把由x1,y1, x2, y2构成的子矩阵里的每个元素都加上v。2 x1, y1, x2, y2, v 把这个子矩阵的每个元素都修改为v。3 x1, y1, x2, y2 查询原创 2014-10-02 13:03:32 · 1107 阅读 · 0 评论 -
UVA 11423 - Cache Simulator (树状数组)
UVA 11423 - Cache Simulator (树状数组)题目链接题目大意:模仿磁盘缓冲区的工作机制,给你n个不同size的(递增的)磁盘缓冲区,给你要访问的数据,根据LRU原则,问每个size的磁盘分别有多少次miss(数据没有在缓存中就是miss),解题思路:因为数据最多有10^7,所以数据访问的序列最长也就是10^7。树状数组的每个位置代表的是访问序列的位置原创 2014-10-27 23:18:26 · 1346 阅读 · 0 评论 -
UVA1232 - SKYLINE(线段树区间修改)
UVA1232 - SKYLINE(线段树区间修改)题目链接题目大意:按照顺序盖楼,如果这个位置(当前要盖的楼覆盖范围内)要新建的楼的高度>=之前就有的最大高度,那么就+1.最后输出这个+1的总数。解题思路:线段树区间修改值,并且每次修改的时候返回修改的位置总数。因为可能左右子树的高度会有不同,所以这里加入一个sign来表示左右这一段是否高度一致。代码:#inc原创 2014-10-09 14:12:03 · 1278 阅读 · 1 评论 -
UVA10869 - Brownie Points II(线段树)
UVA10869 - Brownie Points II(线段树)题目链接题目大意:平面上有n个点,Stan和Ollie在玩游戏,游戏规则是:Stan先画一条竖直的线作为y轴,条件是必须要经过这个平面上的某一点,而ollie则画x轴,但是要在Stany画的y轴上经过的点中任意选择一点来作为原点画x轴。然后这个平面就被划分为4个象限,轴上的点都不算,1,3象限的点的个数就是Stan的原创 2014-10-24 15:13:22 · 856 阅读 · 0 评论 -
UVA - 1400"Ray, Pass me the dishes!"(线段树)
UVA - 1400"Ray, Pass me the dishes!"(线段树)题目链接题目大意:给你N个数字,要求你动态的给出L到R之间,X>= L && Y解题思路:结点保存三个附加线段,max_sub, max_suffix, max_prefix.对于每次查询最大的连续和要不出现在左子树的max_sub, 要不就是右子树的max_sub, 要不就是左子树的max_原创 2014-09-27 09:41:24 · 980 阅读 · 0 评论 -
UVA12299 - RMQ with Shifts(线段树)
UVA12299 - RMQ with Shifts(线段树)题目链接题目大意:要求你查询某一段的最小值,但是还有一个shift操作,将(a0, a1, a2, a3..ak)这个K个位置的数字互相对掉,例如a0位置的值变成a1,a1位置的值变成a2...ak位置的值变成a0.解题思路:因为shift后面的操作数最多30个,所以可以用线段树单点修改。复杂度n*logn。用s原创 2014-09-26 09:32:43 · 1391 阅读 · 0 评论 -
UVA11525 - Permutation(线段树)
UVA11525 - Permutation(线段树)题目链接题目大意:给定一个K,将数字1-K这个序列全排列(K!种),然后给你一个公式让你求的N,问第N小的数字排列。解题思路:因为这个求N的公式很特别,Si(K - i)!这个其实就是确定了第i个数是第(Si + 1)大的数字。例如K = 3, S序列 3 2 1,那么3 (3 - 1)!就说明第一个数是3。接着2原创 2014-09-26 09:43:50 · 966 阅读 · 0 评论 -
UVA12086 - Potentiometer(线段树/树状数组)
UVA12086 - Potentiometer(线段树/树状数组)题目链接题目大意:给你N个数字,然后有q个操作,操作类型:M代表修改某个位置的值为r,S代表查询某一段的数字和。解题思路:线段树或者树状数组。线段树#include #include const int N = 8e5 + 5;int v[N];int n;int Query (原创 2014-09-26 09:24:12 · 885 阅读 · 0 评论 -
UVA12232 - Exclusive-OR(带权并查集)
题目:UVA12232 - Exclusive-OR(带权并查集)题目大意:给你I P V 代表Xp 的值是V。或者 I P Q V 代表X P ^X i + 1 ^X i+2 ...^X^Q = V;然后给你Q k p1 p2 p3...pk问这些数字的异或值。解题思路:这题首先要明确 x ^ y = V , x ^ z = W, 那么 y ^ z = V ^ W; 所原创 2014-09-13 19:38:55 · 1030 阅读 · 0 评论 -
UVA586 - Instant Complexity(递归加模拟)
UVA586 - Instant Complexity(递归加模拟)题目链接题目大意:给你一段代码,要求你算复杂度。OP代表操作,Loop代表循环,end结束。解题思路:递归去模拟。具体看代码。代码:#include #include const int N = 15;char s1[N], s2[N];typedef long long ll;ll原创 2014-09-24 09:26:41 · 755 阅读 · 0 评论 -
UVA10273 - Eat or Not to Eat?(暴力)
UVA10273 - Eat or Not to Eat?(暴力)题目链接题目大意:一个农场的主人为了改善收入决定每天要将产量最少的那一头牛杀掉,但是如果这一天出现了多只产量最小的牛,那么这一天一头也不杀。然后给你n头牛,给你每头牛的产量周期和周期内的产量,问多少天后可以确定剩余的牛的情况。解题思路:求出这n头牛的周期的最小公倍数,那么在这个周期内,如果没有牛被杀的话,那么原创 2014-09-23 14:51:49 · 931 阅读 · 0 评论 -
548 - Tree
题目:548 - Tree题目大意:给树中序后续遍历,然后找出叶子节点到裉节点的和最小的,如果和相同就看哪个叶子节点数值小,就输出那个叶子节点的值。解题思路:先利用中序后序建树,在遍历找和最小的。注意:释放叶子节点时,要赋值为NULL;否则指针就变成野指针了。#include #include #include const int N = 10005;原创 2014-02-04 17:49:00 · 600 阅读 · 0 评论 -
839 - Not so Mobile
题目:839 - Not so Mobile题目大意:给出一个杠杆,判断是否平衡。解题思路:分别建两棵树,里面放重量,和对应的距离。然后后序的方式判断每一个小杠杆是否平衡。因此要先判断00情况,然后0x情况,然后x0情况,最后才是xy情况。反着的话,当0x的情况解决完后,情况就变成例了yx的情况,所以xy要放在最后。#includeint t;struct t原创 2014-02-04 21:21:58 · 593 阅读 · 0 评论 -
699 - The Falling Leaves
题目:699 - The Falling Leaves题目大意:给一棵树,要求算在同一竖直位置的值得和,从左到右打印出来;解题思路:先建树,然后重点就是调用递归来将同一竖直位置的值加起来,用一个数组来存放,根放在数组最中间,左边的孩子就中间-1,右边的就中间的加1,这样同一竖直的位置的就会加到相同的数组元素里,并且要同时记录最左边的数,以便后面输出时控制最后的回车。#i原创 2014-02-05 15:50:07 · 530 阅读 · 0 评论