栈和队列
文章平均质量分 71
MyFishedee
这个作者很懒,什么都没留下…
展开
-
POJ 1363
超级水题,其实可以只用两个栈就可以了。#include using namespace std;const int MAX = 1010;int InputStack[MAX];int MidStack[MAX];int ResultStack[MAX];int n;int InputStackI,MidStackI;int main(){原创 2011-06-17 19:38:00 · 687 阅读 · 1 评论 -
POJ 1979
水题,简单的DFS#include using namespace std;const int MAX = 30;int row , col;char data[MAX][MAX];int sum;bool getnext( int xx , int yy , int& newx , int & newy , int step ){ static int x原创 2011-06-20 15:58:00 · 853 阅读 · 0 评论 -
POJ 1068
比较有意思,因为要脱离掉原来的括号匹配的想法来做。先建立括号,再建立W式#include using namespace std;const int MAX = 200;int data[MAX];char input[MAX];int result[MAX];int n,inputi,resulti;void change(){ int inp原创 2011-06-21 10:01:00 · 541 阅读 · 0 评论 -
POJ 2045
水题,这一题上面用栈会比较好#include #include #include using namespace std;const int MAX = 1000;typedef struct _Node{ char name[81]; int weight;}Node;Node data[ MAX ];int stack[ MAX ];原创 2011-06-19 19:58:00 · 685 阅读 · 0 评论 -
POJ 1686
随便代入三个数来计算,相同则YES,否则NO还有就是OJ不能有头文件,否则RT#include #include #include #include using namespace std;const int MAX = 200;int value[MAX];int grade[MAX];char leftinput[MAX],rightinput原创 2011-06-19 21:11:00 · 1268 阅读 · 0 评论 -
POJ 3494
单调栈,枚举每一个点,计算它上面共有多少个1,最后获取left与right值,计算max值时间复杂度为O( n ),只是代码打得不好,时间比较慢,仍然AC本题主要考察对搜索的理解,是应该枚举点,还是枚举边#include using namespace std;const int MAX = 2010;typedef struct _Node{ int data;原创 2011-06-20 13:19:00 · 1192 阅读 · 0 评论 -
POJ 3295
水题,前缀表达式求值。#include #include using namespace std;const int MAX = 200;bool value[128][2][2];char input[MAX];bool varabile[128];int inputi;bool findresult(){ bool left,right;原创 2011-06-21 00:46:00 · 489 阅读 · 0 评论 -
POJ 3278
一维的广度优先遍历注意怎么用数组写队列,还有就是基本剪枝,最后是检测结尾的位置,是在for循环内部,而不是外部哦#include using namespace std;const int MAX = 100010;typedef struct _Node{ int step; int cur;}Node;Node queue[MAX];bool e原创 2011-06-21 08:52:00 · 508 阅读 · 0 评论 -
POJ 1949
栈,AOE,天啊,题目居然骗我,他说最多入度为100个,去死,都不是这样的,叉。害得我用数组存东西,好吧,我后来觉悟了,我用list!结果AC#include #include #include #include using namespace std;const int MAX = 10010;list out[MAX];int insize[MAX];原创 2011-06-24 22:39:00 · 811 阅读 · 0 评论 -
POJ 2082
这题跟2796几乎一样,这里就不多说了。(TMD的题意,欺负我不懂英文,叉)#include using namespace std;const int MAX = 50010;typedef struct _Node{ int height; int left; int right;}Node;Node data[MAX];int su原创 2011-06-20 14:15:00 · 1241 阅读 · 0 评论 -
POJ 2559
单调栈问题,跟2796差不多。要注意的是,一次栈扫描就可以决定左右边界了。#include using namespace std;const int MAX = 100010;typedef struct _Node{ int data; int left; int right;}Node;Node data[MAX];int stack[原创 2011-06-20 10:19:00 · 996 阅读 · 0 评论 -
POJ 3250
单调栈的入门使用#include using namespace std;const int MAX = 80010;int data[MAX];int stack[MAX];int n,stacki;long long find(){ long long sum = 0 ; stacki = 0 ; for( int i = 0 ; i != n原创 2011-06-18 12:34:00 · 811 阅读 · 0 评论 -
POJ 1472
题目其实很简单的啦,要注意的是输出格式,还有要仔细。。我就两个都错了,结果WA三次才AC!#include #include #include using namespace std;const int MAX = 10;typedef struct _Node{ int data[MAX+10];}Node;void NodeInit( Node&原创 2011-06-19 18:36:00 · 846 阅读 · 0 评论 -
POJ 2386
水题,其实是DFS的一个应用,重点是如何将递归转化为非递归#include using namespace std;const int MAX = 101;typedef struct _Node{ int x,y,step;}Node;char data[MAX][MAX];Node stack[MAX*MAX];int row,col,stacki;原创 2011-06-19 19:16:00 · 694 阅读 · 0 评论 -
POJ 3768
挺有意思的题目,不过还是很水以下代码C++能过,G++不能#include #include #include using namespace std;const int MAX = 3010;char result[MAX][MAX];int row,col;char input[10][10];int mypow( int original , in原创 2011-06-20 17:05:00 · 899 阅读 · 0 评论 -
POJ 2823
单调队列入门,单调队列与单调栈都很有意思啊。。。我喜欢C++能过#include using namespace std;const int MAX = 10000100;int data[MAX];int min[MAX];int max[MAX];int queue[MAX];int qbegin,qend,n,k;void findmin原创 2011-06-21 19:08:00 · 523 阅读 · 0 评论 -
POJ 1028
特级水题,按着他做就行了。#include #include using namespace std;const int MAX = 101;typedef struct _String{ char url[71];}String;String backstack[MAX],forwardstack[MAX];int backstacki,forwar原创 2011-06-19 18:56:00 · 564 阅读 · 0 评论 -
POJ 2796
我傻叉啊,静态的区间求和根本就不需要用树状数组,实在是太傻叉了。不过,还是过了,哈哈,我懒得改了,时间复杂度为O( n log(n) )主要考察内容是单调栈,单调栈的主要作用是搜索最近的那个比他更高级或更低级的数据,表达式求值的本质也是如此#include using namespace std;const int MAX = 100010;typedef struct原创 2011-06-19 23:44:00 · 1150 阅读 · 0 评论 -
POJ 1664
这题可以用DP做,只是这个节都用栈,那就用递归做吧。。#include using namespace std;int sum;void find( int remain , int max , int times ){ if( times == 0 ) { if( remain == 0 ) ++sum; } else { for(原创 2011-06-20 15:06:00 · 583 阅读 · 0 评论 -
POJ 2269
水题,表达式问题。这里主要是用来尝试一下STL中自带的集合的各种操作,包括交,并,差。#include #include #include #include #include #include using namespace std;const int MAX = 300;int value[128];char stack[MAX];int原创 2011-06-20 19:43:00 · 890 阅读 · 0 评论 -
表达式求值
简单,好用,安全#include #include #include using namespace std;char data[128];int i;double expr();void match( int key ){ if( data[i] != key ) throw exception("输入错误"); ++i;}double原创 2011-06-30 17:38:00 · 553 阅读 · 0 评论