
栈、队列
ITCharge
高效率编程,慢节奏生活。
展开
-
HDU1274 展开字符串【栈】
题目大意: 为了表示纺织CAD系统的纱线排列问题。用小写字母来表示不同的纱线,连接在一起表示纱线的组合。 前边加数字表示重复多少次。比如2(abc),a、b、c表示不同的纱线,abc表示纱线组合,2+()表示abc 重复两次,即abcabc。如果前边没有数字,则默认为1。现在给你一个这样的字符串,请将表达式展开 输出排列结果。 思路: 使用栈操作,将字符串展开。重点在于去括号。 1)如果遇到数字或是左括号,直接入栈。 2)如果遇到字母,分两种情况: 栈顶元素为数字num,则将字母压入占中num次。 栈原创 2015-04-14 17:55:36 · 1464 阅读 · 1 评论 -
POJ1363 Rails【stack】【栈】
题目大意:如上图所示,已知火车要从A入站,然后从C出站。火车进站的 顺序为1~N,现在给你出站的顺序。问:能不能通过站台改变火车出站顺序 来实现按所给顺序出站。 思路:把站台看做是一个栈,按1~N的顺序遍历火车原先顺序,先入栈,如 果栈顶的火车编号和所给出站顺序将要出站的编号一样。那么火车就出栈, 直到栈里边所有满足出站顺序的火车都出站,否则就一直入栈。最后判断所 有火车是否都出站了。若都出站,输出Yes,否则输出No。原创 2014-12-09 18:58:08 · 3244 阅读 · 0 评论 -
HDU3351_Seinfeld【栈】
题目大意:一串由'{'和'}'组成的字符串,'{'和'}'可以互相转换,括号匹配的时候 为稳定状态。输入一个字符串,问最少经过几次变换能达到稳定状态。 思路:先建立一个栈,让每个字符逐个进栈,若相邻的两个字符为"{}"(即相邻括 号匹配),则两个字符同时出栈。最终栈里边留下括号不匹配的项。 通过观察可知:最终留在栈里的肯定为以下情况 “}}}}…{{{{{…",即左边全为'}',右边全为'{'。那么最少要转换多少次呢。 由题意可知,括号总数为偶数 分别计算'}'的个数sum1,'{'的个数sum2。 若'}原创 2014-10-20 09:45:24 · 1173 阅读 · 0 评论 -
NYOJ35 表达式求值【栈】
题目大意:给你一个计算表达式,求出最终结果。 思路:用两个栈来分别存数和操作符, 遇到'(',操作符入栈,遇到')',计算括号内的 式子。遇到'+'、'-'、'*'、'/'就比较当前运算符与栈中运算符的优先级,大于等于于栈 中优先级就计算,否则就入栈,留待下次计算。最后计算栈中剩下优先级低的相应式子原创 2014-12-13 12:10:51 · 1105 阅读 · 0 评论 -
HDU1285 确定比赛名次【拓扑排序】【优先队列】
思路:因为要满足字典序的拓扑排序,所以用了STL中的优先队列。 priority_queue<int,vector<int>, greater<int> > Q; 实现了权值小的优先级高,取出的时候保证序号是队列中最小的。 其他的和一般的拓扑排序无区别。原创 2014-12-22 22:22:36 · 1153 阅读 · 0 评论 -
NYOJ93 汉诺塔(三)【栈】
题目大意:上边说的很明白了。 思路:就是用三个栈进行模拟过程并判断就可以。原创 2014-12-13 14:45:30 · 1067 阅读 · 0 评论 -
UVA442 Matrix Chain Multiplication【stack】【栈】
题目大意:给你N个矩阵的规模,再给你矩阵链乘的表达书,输出乘法的次数。 思路:利用栈来解表达式,遇到字母时,矩阵入栈,遇到右括号')'出栈并计算 结果,再将结果入栈。原创 2014-12-11 09:02:25 · 1039 阅读 · 0 评论 -
POJ1879 Tempus et mobilius Time and motion【置换群】
题目大意: 有三条轨道,一个球库。球库有编号1~N的小球,按顺序排列。三条轨道分别是1 分钟 单位的轨道,容量为 4;5 分钟单位的轨道,容量为 11;60 分钟的轨道,容量为 11。 轨道可视为栈(先进后出)。每过 1 分钟,一个小球从球库中出来,球库可视为一个队列 (先进先出)。小球先进入1 分钟轨道。如果 1 分钟轨道中已经有了 4 个,则这四个小球 依次进入球库,而这个球进入 5 分钟轨道。如果 5 分钟轨道已经有了 11 个,则这 11 个球依次进入球库,而这个球进入 60 分钟轨道原创 2015-09-06 11:30:19 · 544 阅读 · 0 评论