自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

pb1995的博客

专注, 超越 (774000BF)

  • 博客(79)
  • 收藏
  • 关注

原创 Uva 810 DFS+骰子模拟

原题很有意思的一道题, 因为是根据骰子的点数走迷宫, 自然就只能一步步模拟了.最大的难题在于怎样确定骰子旋转后的情况. 由于骰子旋转之后每个面点数的变化规律比较难找, 但由于骰子有六个面,而且每个面的对立面都是固定的, 因此只要知道其中两个位置的点数就可以推断出整个骰子的点数了。因此可以采用枚举法, 也就是可以用一个二维数组, 枚举存放固定两个面(如front和top)之后剩下的第三个面(如righ

2015-11-28 08:47:34 630

原创 Uva 10410 层序+前序构造树

原题非常经典也比较有意思的一题, 由树的层序遍历和前序遍历构造树. 但是我们都知道, 没有中序的话构造出来的树的可能情况是很多的, 因此题目加了一个很关键的限制条件, 就是遍历序列都是先从点数小的子节点开始访问的. 一开始没注意到这个关键, 空想了很久也没想出来比较好的方法.其实思路和其他同类的问题(根据两个遍历序列构造树)的思路完全一样, 都是以一个序列为标准, 对另一个序列不断分解成几段

2015-11-27 13:23:24 625

原创 Uva 127 模拟+细节

原题简单题, 模拟叠纸牌, 规则是一开始有52堆牌, 每一堆有1张, 如果某一堆牌的最顶上的一张牌与它左边第一张牌(指的是左边第一堆上的最顶上一张牌, 下同)或左边第三张牌的花色或点数相同则可以把这张牌往那张牌上叠, 以此类推,直到所有的牌都无法移动为止。 如果某一堆上没有牌了,就这个堆的位置删除(也就是后面的堆都可以往左移动)。注意到几个细节:每次只能操作某一堆牌的最顶上那张;如果有若干张可以移

2015-11-26 15:49:49 526

原创 5-30 Table Tennis (30分)

原题一看就是模拟题, 但就是有些细节有点繁琐.. 题意大概是维护一些桌子, 有人来的时候如果有桌子就分配,没有桌子就让他们等待下一张空闲的桌子。只不过还有一些特殊的VIP桌子和VIP用户,如果当前有空闲的VIP桌子,那就优先分配给已经到达的且当前正在等待队列中的那些VIP用户。若没有空闲的VIP桌子则VIP用户视为普通用户处理。我的主要思路就是按时间点(currentTime)推进的顺序来逐一处理

2015-11-25 00:00:26 410

原创 uva 804 Petri Net 模拟

原题普通的模拟题, 题目虽然比较长但流程还是比较简单的, 所以主要还是几个细节的问题处理好就行了。注意如果所给数据只能进行N轮循环, 而要求的循环数NF正好等于N时,执行完N轮退出时的状态仍然是alive,虽然下一步已经没有操作可做了。奇怪的是一开始不知道为啥超时了,然后似乎没改进什么复杂度只改了几个细节再交上去就AC了。。。以下为AC代码:#include <iostream>#include

2015-11-15 15:11:15 501

原创 Uva 12166 严格平衡树

原题一开始想得太简单, 直接读数据建立树, 然后像堆调整那样一个个结点检查并向上调整子节点的重量, 后来写到一半发现这样不可行, 需要处理的情况太多, 这样模拟的过程太繁琐了.. 于是可耻地google了答案——原来这棵树每层的结点值都是满足一定规律的,在同一层上的结点值必须相等, 而且上层的值是下一层的节点值的两倍。认识到这个规律后,还是需要做一点巧妙的处理(方法来自这里 ) :由于只要选择一

2015-11-14 17:24:14 423

原创 Uva 1600 满足条件的最短路

原题非常有意思的一道最短路径题. 地图中有障碍物, 障碍物可以通过, 但不能连续通过K个障碍物. 实现起来也不难, 就是在BFS的时候给结点添加一个属性来记录已连续通过的障碍物个数就行了.比较值得注意的地方是, 如果用map存储自定义类型, 而且自定义类型中的还有多个同等重要的成员时, 重载<运算符的时候必须小心一些, 应该类似这样的形式:friend bool operator<(const Po

2015-11-14 14:01:30 293

原创 Uva 439 象棋最短路

原题经典的最短路问题, 只不过可以走到的结点需要满足象棋中Knight的走法, 类似于中国象棋中马的走法, 只不过不用考虑拐角的限制。 还是比较简单的, 普通的BFS做一下即可还是不得不说 - STL大法好 :)#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#

2015-11-14 11:02:48 302

原创 Uva 536 前序中序序列构建树

原题由中序遍历和前序遍历序列求树的后序 题目虽然简单但是确实比较经典, 所以还是记录一下吧 这次尝试一下用map容器存储树 这样既能表面上实现树的顺序存储, 又不会浪费太多空间 :)#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <algo

2015-11-14 10:21:32 286

原创 Uva 712 树计算布尔函数

原题简单题, 就是用一棵树来表示一个布尔函数然后对一些输入的变量求函数值 题目已经把意思和解题思路都描述清楚了, 直接模拟即可 最后又被空行坑了一次 - -||#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <algorithm>#incl

2015-11-14 09:47:40 327

原创 Uva 673 括号匹配

原题 经典的括号匹配问题, 这种问题一律用堆栈, 也非常好写 唯一需要注意的地方是以行为单位区分字符串的, 因此要每次读入一行 然后再消去其中可能出现的空格. 用algorithm的remove_if和string自带的erase一步到位~#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#

2015-11-13 20:21:27 282

原创 UVA 11853(找连通块)

求连通块问题, 按照紫书上的思路, 构图(每一块受攻击区域作为一个结点)进行DFS, 若有一条路(攻击区域内)能够连通上下边则输出IMPOSSIBLE, 否则就分别计算最靠北(坐标值较大)的出入点.整个区域是一个大的正方形. 求连通块比较简单, 从那些与区域上边相交的结点出发进行DFS, 若能够到达某一个与区域的下边相交的结点则说明上下边可以连通.我觉得比较难的地方反倒在于找坐标值最大的出入点。比如

2015-11-12 21:44:34 575

原创 编译错误need 'typename' before *** because *** is a dependent scope 浅析

例子template<typename T>void func(){ vector<int>::iterator it_int; vector<T>::iterator it;}编译后提示:[Error] need ‘typename’ before ‘std::vector::iterator’ because ‘std::vector’ is a dependent scop

2015-10-31 12:59:23 14086 1

原创 uva 1599

原题 最近课业比较繁忙, 好久没时间写题了。 这也算是最短路径问题的改版,求满足一个条件的最短路径。 经验不足,一开始自然就想到用DFS(因为比较好写),结果当然TLE了 后来才想起来DFS的复杂度是O(N^2), 而BFS是O(N+E), 所以遇到这种规模比较大的图肯定要用BFS了, 根本不是一个数量级啊 网上虽然方法比较多, 但是描述得不是很全面, 我再来整理一下吧 主要思路是用

2015-10-31 10:45:54 908 1

原创 解决打开IE无反应的问题

装了Win10之后一直都没遇到问题, 不知道什么时候开始IE打不开了, 点击图标或者在Edge里打开都没任何反应,不过平时一直用不到就没去管了但是最近发现有些校内网只支持IE的兼容模式Chrome又没法设置兼容模式(这点上反倒是360浏览器做得更好)所以只能想办法解决IE问题了Google上搜了半天, 中文英文都搜了好几次, 有人说在添加程序功能里, 先把IE的选项给去

2015-10-15 15:39:14 1803

原创 拓扑排序介绍

准备开始写一个系列的文章, 把ACM里常用的方法或经典的思路都总结一遍。不过毕竟才刚刚起步,没有接触到什么高深的算法,所以先从最简单的拓扑排序开始写起吧才疏学浅,以后如果有哪里讲得不清楚的敬请评论,大家一起讨论~拓扑排序虽然是个比较简单的入门问题, 但是在许多题目中都需要用到, 所以还是来自己总结一下常用的拓扑排序方法吧首先, 拓扑排序的概念:在图论中,由一个有向无环图的顶

2015-10-09 00:25:41 390

原创 uva 10562

原题一道蛮有意思的字符串处理题建树什么的还是用递归比较方便题目描述和思路也都比较清晰, 就不再赘述了#include #include #include #include #include #include #include #include #include #include #include #include #include #include

2015-10-06 19:21:51 404

原创 uva 10129

原题欧拉路径经典问题, 给一些字符串, 要求验证字符串之间是否存在欧拉路径题意能化简就化简, 其实字符串只看首尾字母即可, 各代表一个顶点, 一个字符串就是一条边然后就是欧拉路径的通解法, 对于无向图只需要验证连通性, 并且奇数度的顶点只能有2个(一个起点一个终点形成欧拉路径) 或 0个(形成欧拉回路)对于本题中的有向图, 除了连通性, 除了起点和终点之外, 各个顶点的出度

2015-10-06 14:49:00 426

原创 uva 10305

原题经典的拓扑排序, 每次找入度为0的点, 输出, 并且把与这个点相连的点的入度-1依次循环就行了因为我这里是每输出完一次就对原数组排序, 所以注意要把输出完毕的点入度设为一个较高的值#include #include #include #include #include #include #include #include #include #inc

2015-10-06 14:28:41 266

原创 uva 816

原题在开始刷题这一个月里, 迄今为止耗时最久的一题!题目虽然很长, 但是题意不难理解, 这个迷宫是一个定向迷宫, 每一点都有自己的规则走每一步都要受到这个点的规则限制来选择下一点, 就这样, 给出起点和终点, 要找到一条从起点到达终点的路径一开始没看到要找尽量短的路, 就直接用DFS写, 那叫一个easy然而WA了3次, 是不是看漏条件了, 于是回头看题目, 才看到

2015-10-02 19:21:10 334

原创 uva 572

原题简单题, 找图的连通子集个数, 不必多说, 直接DFS#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using

2015-10-01 21:10:16 176

原创 uva 297

原题有点烦的一题, 也是计算节点的值, 但是有两棵树, 取两棵树的并集, 也就是两棵树同一个节点的值要尽量取大的方法很多, 基本上也都是需要给每个结点存一个值, 这个值等于其四个子节点的值之和, 以此类推这次试了一个以前没用过的方法, 因为子节点的数目是固定的, 所以想给每个结点赋一个ID, 然后用map记录结点的值子节点从左到右标上序号1,2,3,4, ID就是从根节点(10

2015-10-01 20:34:10 287

原创 uva 699

原题简单题, 又是构造树而且不用存储的, 这种都不用实际地去构造一种struct,直接递归然后计算即可, 这里像是一个边界不固定的数组, 下标有负数 所以我的思路是用一个map来记录每个pos的数量, 代码还是比较清晰, 就不多说了话说用好递归真是事半功倍#include #include #include #include #include #inclu

2015-10-01 09:55:14 223

原创 uva 839

原题简单题, 用杠杆原理判断是否平衡没有经验, 一开始就构造了一个struct, 但是AC之后去翻了别人的代码, 发现没啥必要因为这些数据判断完一次就没用了, 干嘛要存起来呢还有就是又被这个坑给坑到了....两个case之间需要空行 , 意味着最后一个case输出完后不需要空行牢记!!!! #include #include #include #include

2015-10-01 08:40:59 241

原创 uva 122

原题模拟构造一棵二叉树的过程 , 我的方法就是构造一个题目中所说的pair结构,也可以当做树的结点, 包括数值, 两个子节点指针, 以及路径先把所有输入收集起来, 按路径的长度排序, 然后按顺序插入(其实这个顺序就是最后的中序遍历的顺序了)插入的时候, 有几种情况可以判断出是 not complete, 不过我这里写得不是很整洁, 思路有点乱主要就是, 先看在寻路的过程中如果中

2015-09-28 12:22:25 412

原创 探究二维数组的传递

#include const int MAXN = 3;int arr[MAXN][MAXN];void func1(int ptr[MAXN][MAXN]){ // 可行(常用) // 或 (*ptr)[MAXN] 或 ptr[][MAXN] ; for(int i=0; i<MAXN; i++){ for(int j=0; j<MAXN; j++){ prin

2015-09-28 08:47:34 246

原创 uva 679

原题涉及二叉树的问题, 可以尝试用二进制简化问题 类似于哈夫曼编码问题, 由第一个球全部走左子树可以猜测到走左子树代表0, 右子树代表1, 则第i个球所走的路径就是i-1的二进制码的逆序 由此可以直接模拟第i个球, 而不用模拟前面所有的球的运动 #include #include #include #include #include #include #include

2015-09-27 22:12:22 323

原创 uva 12657

原题本来没注意到M,N的规模, 用的STL的list, 后来发现找元素的时候实在太慢了( algorithm的find是顺序查找 )然后看了答案, 发现可以用两个辅助数组 Left, Right来存每个元素的左右结点, 这样就不用一个个去查找出来再交换了, 这也是一种极简的实现双向链表的方法, 在比赛中往往没有时间写完一个数据结构的所有操作, STL效率又不够快时,  应该自己写一

2015-09-27 10:21:41 436

原创 uva 11988

原题挺有意思的一道题, 模拟输入, 用链表+迭代器操作非常方便一个一个字符地读进来, 读到 [ 就把迭代器指向表头, 读到 ] 就把迭代器指向表尾这里顺便复习一下 list 的迭代器插入规则 : 首先在iter处插入, 指的是从iter指向的元素的前面插入其次, 用迭代器插入一个字符后, 原迭代器仍然指向原来的字符(与连续存储的vector不同)即如果 iter 指向 list

2015-09-27 09:30:14 285

原创 uva 442

原题简单题, 计算矩阵链乘需要的数乘次数这类题最近做了几道, 都是采用遇到左括号忽略, 遇到右括号出栈, 其他字符压栈的操作大概是表达式题的通用算法了把#include #include #include #include #include #include #include #include #include #include #include #inclu

2015-09-27 09:00:01 506

原创 uva 514

原题好经典的一道题, 虽然见过几次了, 不过一开始居然还想不起来..用STL的堆栈模拟就行了, 关键做法就是对输入的序列从头扫描, 如果扫描到的数不是栈顶元素就压栈(因为不是栈顶元素肯定就不是现在这步出来的元素嘛 )如果是就扫描下一个数, 以此类推如果扫描完尾部最后一个数, 堆栈不是空的, 说明出栈序列不合法#include #include #include #in

2015-09-26 22:26:26 302

原创 uva 108

原题经典题, 计算子矩阵元素和的最大值方法 : Kadane 算法的推广 ( 即O(N)求最大子序列的算法推广到矩阵)思路 : 各自求出连续K行中每一列的和, 每得到一个序列, 用Kadane算法求出这个序列的最大子序列, 以此类推可以用一个一维数组记录每一次的N列和, 从首行开始, 逐行向下, 每到一行就加上这一行的和, 检查maxSum#include #incl

2015-09-26 18:26:05 230

原创 uva 210

原题常规但是有点烦的一道模拟队列题..一开始理解错题意了,导致后来思路有点乱, 换了好几次容器因为program循环执行的顺序是不一定的, 所以不能采用遍历一个program数组更新状态的方法而应该还是采用消息队列的方法, 每执行完一个program, 如果program还有命令没执行完而且没有被block就继续往队尾投递一个消息注意题目中的block queue, 每次unl

2015-09-26 13:42:04 569

转载 uva 12333

原题本来以为只是大整数计算的问题, 用了很笨的方法, 计算出前100000个斐波那契数然后逐一匹配结果等了半天也没算出来... 后来一查发现到后面会出现10^2W次方的位数, 显然不能用这种方法后来google了答案, 才想起来这是前缀查找的, 应该用字典树来存储每个数, 而且只需要存储前40位即可.....原先想的太复杂了啊再把别人AC的思路描述一下把:整个字

2015-09-26 09:02:42 535

原创 uva 822

原题又是一道简单的流程模拟题, 注意看题抠细节关键在于安排任务时是以人为主体还是以待办的事件为循环主体这要根据题目的某些要求来决定这道题目要求有冲突时需要选出lasttime最早的, 否则就选出id最小的乍一看感觉是要以待办事件为主体来找人的但是写到一半发现写不下去了, 因为在找到一个available的人的时候, 还需要跟其他available的人作对比,也就是说

2015-09-25 18:58:34 975

原创 uva 12504

原题简单题,找不同, 用map存储dictionary就行了要注意的是value虽然是数字, 但不定长, 因此也需要用string类型来存储这题写得有点丑.. 仅供娱乐#include #include #include #include #include #include #include #include #include #include #inclu

2015-09-25 15:36:27 267

原创 uva 230

原题也是纯模拟题, 远没有上次高尔夫球赛问题复杂..就构造一个Book结构, 把涉及的变量都加进去, 除了title, author还有一个state注意有三种state, (一开始以为borrow指令是无意义的, 其实还是有影响的, 借出去的书遍历的时候需要直接跳过了)#include #include #include #include #include #inc

2015-09-22 08:48:45 488

原创 uva 1595

原题经典的题, 验证点集的轴对称性方法就是,  将所有点记录,枚举每个点的对称点看是否存在,不存在则NO#include #include #include #include #include #include #include #include #include #include #include #include #include #inclu

2015-09-21 23:57:50 304

原创 uva 12100

原题简单题, 纯粹的按题意队列模拟有时候用一点struct可以使得代码更清晰, 况且struct也不太会拖慢速度#include #include #include #include #include #include  #include #include #include #include #include #include  #i

2015-09-21 21:25:33 389

原创 uva 10763

原题简单题, 主要还是自定义一个类型装两个坐标(因为没法创建那么大的二维数组)然后用map映射自定义类型来记录是否有出现过,再有就是用一个count计数器, 出现新的坐标就+1, 匹配一对就-1, 以此来最后判断是否全部匹配了#include #include #include #include #include #include #include #include

2015-09-20 20:52:53 269

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除