数据结构
JinxiSui
退役ACMer
展开
-
UVa - 514 Rails ( 栈 )
UVa - 514 Rails ( 栈 )水题 数据结构 : 栈题意 输入一个整数N表示火车的数量,且栈A内火车按顺序排列( A栈栈首是1,栈尾是N ) ; 接下来给出1 - N的排列表示希望达成的栈B内的火车顺序 , 火车只能由A → B 或者 A → C(暂存) → B . 问给出的栈B序列能否达成 [ UVA - 514 (VJ) ]思路 用...原创 2017-12-11 14:41:09 · 299 阅读 · 0 评论 -
UVa 548 - Tree (二叉树遍历, DFS)
题意给出一棵带权二叉树的中序和后序遍历 找一个叶子使得它到根的路径上的权和最小。 如果有多解,该叶子本身的权应尽量小思路学习了一下紫书给的思路和代码先根据中序和后序遍历构造二叉树 根据后序遍历找到树根,然后在中序遍历中找到树根,从而找出左右子树的结点列表,然后递归构造左右子树。 最后用DFS求最小权和AC代码#include <iostream&g...原创 2018-02-10 15:31:49 · 229 阅读 · 0 评论 -
UVa 839 - Not so Mobile
题意判断树状天平是否平衡 输入的重量如果是0说明该节点下面有子树思路水题 递归输入并判断即可 每次更新子树的重量 注意一下格式AC代码#include <iostream>#include <cstdio>#include <cstring>using namespace std;bool judge( int...原创 2018-02-10 16:14:04 · 142 阅读 · 0 评论 -
UVa 699 - The Falling Leaves
题意先序输入一个带权二叉树, -1即无该儿子思路水题 递归输入, 用数组保存每个水平位置的总和即可一开始没读清楚题, 以为是每一行作为一个二叉树, 本来想用string输入stringstream切割, 观察样例就能推翻AC代码#include <iostream>#include <cstdio>#include <cstr...原创 2018-02-10 17:23:36 · 166 阅读 · 0 评论 -
POJ 3253 - Fence Repai ( 优先队列 )
题意切割木板, 比如一根长21的木板要切割成5, 8, 8的三块, 每次切割花费的金额为两断的长度. 比如先把21切成16和5, 花费21元, 再把16切成8和8, 花费16元, 总计消费37元. 若先把21切成13和8, 花费21元, 再把13切成8和5, 花费13元, 总计消费34元, 花销更少 现在就要求出最小开销思路这道题可以用贪心, 这里主要记录一下白书上提供的优先队列...原创 2018-03-13 20:32:50 · 276 阅读 · 0 评论 -
POJ 2431 - Expedition ( 优先队列 )
题意一辆车要行驶长L的路, 每走单位长度为1的路就消耗单位数量为1的汽油 开车前有P的油, 给出N对数字表示加油站, 第一个数为加油站距离终点距离( 这里一开始读题没仔细读 ) , 第二个数是加油站供给的油量思路学习白书的思路 优先队列 priority_queue 存下0 ~ n号加油站的信息 A[] ( 加油站距离起点的位置 ) B[] ( 加油站供给油量 ) 因为要...原创 2018-03-13 20:04:19 · 197 阅读 · 0 评论 -
UVa 246 - 10-20-30 ( deque模拟 )
题意有一叠52张的扑克牌(除去大王小王), 每次在总叠堆里拿出最上面的一张, 分别放在1-7叠堆的最下面. 如果放下这张牌之后, 小叠堆的最上面2张+最下面1张 / 最上面2张+最下面1张 / 最下面3张 的和为10或20或30, 则将这三张牌抽出来并放到总叠堆的最下面. 如果抽出这三张牌之后, 该小叠堆没有排了, 那么这个叠堆消失, 所有右面序列的叠堆左移.求这个游戏是win(小叠堆全部...原创 2018-03-08 16:45:21 · 228 阅读 · 0 评论 -
UVa 10562 - Undraw the Trees ( DFS )
题意看图写树思路DFS递归AC代码(学习紫书)#include <iostream>#include <cstdio>#include <cstring>#include <cctype>using namespace std;const int maxn = 200 + 10;char tre[m...原创 2018-03-06 12:43:11 · 163 阅读 · 0 评论 -
UVa 11491 - Erasing and Winning ( 优先队列模拟 )
题意给出一个长度为n的数字串, 要求删去d个数字, 使得剩下的总数字最大 (1 ≤ d < n ≤ 10^5 ) 思路根据贪心策略, 越高位的数字越大越好. 但取高位数字时同时要保证剩余量能够满足一共选出n-d个数字 考虑到用优先队列 但同时要记录下刚才取出的数字所在位置, 每次把队列中位置在上次选出数字所在位置之前的元素弹出AC代码#include...原创 2018-04-03 14:35:58 · 185 阅读 · 0 评论 -
PTA - 家谱处理 ( 数据结构 )
思路比赛的时候愣是用map< string, int>的值代表了这个人所处家谱中的层次 后来借鉴了小明学长的思路, 给每个人编id号, 用值表示每个对应的id 用fa[maxn]存的是每个人的父亲id, fa[id] = 父亲的id有一个小问题, AC之后想关闭IO同步提一波速, 没料到PTA很玄学地直接给我返了WA??? 本地测没问题, 检查代码也没有混...原创 2018-03-20 22:24:06 · 2680 阅读 · 0 评论 -
HDU 1251 - 统计难题 ( Tire树 )
题意给出一些单词,再给出一些前缀,求有多少个单词包含这个前缀。思路用map统计水过。赛后意外的发现自己的代码跑了900+ms,为什么这么多人才跑了60+ms (滑稽) 更好的算法是用Tire树(字典树)操作,查询前缀出现的次数,就开一个sum[],表示位置i被访问过的次数浅谈Trie树(字典树)AC代码(Tire,60+ms)#include <iostream...原创 2018-08-14 15:47:54 · 254 阅读 · 0 评论 -
UVa 536 - Tree Recovery
题意给出一颗二叉树的前序遍历和中序遍历, 输出后序遍历思路无需建树, 递归操作即可记录前序遍历(先根遍历) : 如果二叉树为空则进行空操作, 否则首先访问根节点, 然后前序遍历左子树, 最后前序遍历右子树中序遍历(中根遍历) : 如果二叉树为空则进行空操作, 否则首先中序遍历左子树, 然后访问根节点, 最后中序遍历右子树后序遍历(后根遍历) : 如果二叉树为空则...原创 2018-02-10 12:28:42 · 307 阅读 · 0 评论 -
UVa 12657 - Boxes in a Line ( 双向链表 )
题意 你有一行盒子,从左到右依次编号为1, 2, 3,…, n。可以执行以下4种指令: 1 X Y表示把盒子X移动到盒子Y左边(如果X已经在Y的左边则忽略此指令)。 2 X Y表示把盒子X移动到盒子Y右边(如果X已经在Y的右边则忽略此指令)。 3 X Y表示交换盒子X和Y的位置。 4 表示反转整条链。思路双向链表 每次操作只需修改链表中的元素指向 ...原创 2018-02-09 21:38:05 · 193 阅读 · 0 评论 -
UVa - 540 Team Queue
题意 有一个长队包含几个小队, 每个小队连在一起排成一个长队, 有以下三种操作 : ① ENQUEUE 在队列中输入元素x ② DEQUEUE 输出长队队首并将其从队列中移除 ③ STOP 结束处理 如果有队友就站到自己所属队列的最末, 如果没有队友就站到整个长队的最末AC代码#include <iostream>#i...原创 2017-12-21 21:34:04 · 272 阅读 · 0 评论 -
UVa 673 - Parentheses Balance ( 栈 )
匹配平衡的括号 Sample Input 3 ([]) (([()]))) ([()])() Sample Output Yes No Yes思路用栈 遇到左括号 ‘(’ 或 ‘[’ 入栈 遇到右括号 ‘)’ 或 ‘]’ 则查找栈顶元素 , 若匹配则栈顶弹出 最后检查栈是否为空AC代码#include ...原创 2018-01-24 21:13:09 · 148 阅读 · 0 评论 -
UVa 10935 - Throwing cards away I
题意(摘自紫书) 桌上有n(n≤50)张牌,从第一张牌(即位于顶面的牌)开始,从上往下依次编号为1~n。当至少还剩下两张牌时进行以下操作:把第一张牌扔掉,然后把新的第一张牌放到整叠牌的最后。输入每行包含一个n,输出每次扔掉的牌以及最后剩下的牌。思路水题 STL队列记录之前没考虑到的PE情况: Input 1 Output Dis...原创 2018-01-28 11:51:06 · 151 阅读 · 0 评论 -
UVa 12100 - Printer Queue
题意排队打印。每个打印任务有自己的优先级1~9,数字越大优先级越高。每个打印任务需要1分钟,如果队首后面有优先级更高的打印任务,则队首站到队尾,直到队首为队列中最高优先级的任务,则打印。思路水题 操作用STL队列queue 用mrk[10]分别记录1~9优先级任务各自有多少 每次查找队中最大优先级的级别,并循环判断AC代码#include <iostre...原创 2018-01-28 15:31:49 · 176 阅读 · 0 评论 -
UVa 11995 - I Can Guess the Data Structure!
题意一个包包, 可能是栈, 队列, 优先队列, 或其他 操作1代表存入数据 操作2代表拿出顶端/首端的一个元素思路本以为是水题, 居然还WA了两次 仔细思考 发现有个特殊情况没考虑到: 如果存入数量小于取出数, 那么一定是impossible !!!AC代码操作的时候要先判断容器是否非空吖 用完要清空容器吖#include <iostream>...原创 2018-02-02 21:37:35 · 133 阅读 · 0 评论 -
UVa 11991 - Easy Problem from Rujia Liu?
题意刘汝佳出的一道简单题? 一看出题人就知道肯定不简单233 大概是就是输入一个数组 然后找几个下标 比如4 2就是找到数组中第4个2所在下标, 找不到输出0思路蓝书上给的思路是真的很巧妙, 复杂度很小(题目时间1000ms) 把输入组织成一个可以”直接读取结果”的数据结构 构造一个 map< int,vector< int> > 从查询的...原创 2018-02-02 21:49:04 · 130 阅读 · 0 评论 -
UVa 442 - Matrix Chain Multiplication
题意矩阵链乘 求乘法次数思路利用栈<结构体> 遇到字母入栈, 遇到 ‘)’ 出栈并计算, 结果再次入栈AC代码#include <iostream>#include <cstdio>#include <string>#include <stack>using namespace std;s...原创 2018-02-03 22:43:08 · 136 阅读 · 0 评论 -
UVa 11988 - Broken Keyboard (a.k.a. Beiju Text) ( 模拟链表 )
题意破碎的键盘(又名 悲剧文本) 你有一个破损的键盘。键盘上的所有键都可以正常工作,但有时Home键或者End键会自动按下。你并不知道键盘存在这一问题,而是专心地打稿子,甚至连显示器都没打开。当你打开显示器之后,展现在你面前的是一段悲剧的文本。你的任务是在打开显示器之前计算出这段悲剧文本。 输入包含多组数据。每组数据占一行,包含不超过100000个字母、下划线、字符“[”或者“]...原创 2018-02-04 11:53:35 · 318 阅读 · 0 评论 -
UVa 679 - Dropping Balls
题意在二叉树结点1处放一个小球,它会往下落。每个内结点上都有一个开关,初始全部关闭,当每次有小球落到一个开关上时,状态都会改变。当小球到达一个内结点时,如果该结点上的开关关闭,则往左走,否则往右走,直到走到叶子结点 思路根据奇偶找规律 引用一下紫书写的 每个小球都会落在根结点上,因此前两个小球必然是一个在左子树,一个在右子树。一般地,只需看小球编号的奇偶性,就能知道它是...原创 2018-02-05 17:49:27 · 279 阅读 · 0 评论 -
UVa 712 - S-Trees
题意给你一棵完全二叉树,输入0往左走,1往右思路由于是二叉树,正好相应二进制数 直接存到字符串里模拟AC代码#include <iostream>#include <cstdio>#include <cstring>using namespace std;int main(){ int T, t, len,...原创 2018-02-06 20:43:23 · 176 阅读 · 0 评论 -
HDU 5444 - Elven Postman ( 二叉搜索树 )
题意一些精灵住在一棵二叉搜索树上(???),给出一个序列表示这棵二叉搜索树(输入n个数的第一个数为根节点,第二个数和这个根节点比较大小,假如大于当前根节点的值,就往右边的节点走,小于往左边的节点走),现在邮递员要给他们送信,求送信每次走的方向。思路题目太长了 其实看懂了题意就能知道是个裸的二叉搜索树模板AC代码#include <iostream>#inc...原创 2018-08-17 10:04:31 · 308 阅读 · 0 评论