- 博客(35)
- 收藏
- 关注
原创 表达式求值
简单,好用,安全#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 543
原创 POJ
poj的注意点①输入与输出 poj的G++与C++都可以用long long表示64为整数,printf与scanf都用%lld就可以了 poj上的G++输入double用%lf,输出用%f,C++则两者都是%lf②初始化 poj上的G++与C++的数组都有默认初始化为0的功能,注意,是全局数组,别跟我谈局部数组。③头文件 poj上的G++不能包含等头文件 poj上的C
2011-06-24 23:31:00 1097
原创 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 802
原创 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 514
原创 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 532
原创 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 496
原创 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 480
原创 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 882
原创 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 889
原创 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 844
原创 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 574
原创 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 1234
原创 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 1177
原创 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 986
原创 POJ 2796
我傻叉啊,静态的区间求和根本就不需要用树状数组,实在是太傻叉了。不过,还是过了,哈哈,我懒得改了,时间复杂度为O( n log(n) )主要考察内容是单调栈,单调栈的主要作用是搜索最近的那个比他更高级或更低级的数据,表达式求值的本质也是如此#include using namespace std;const int MAX = 100010;typedef struct
2011-06-19 23:44:00 1141
原创 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 1258
原创 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 675
原创 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 688
原创 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 556
原创 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 835
原创 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 805
原创 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 673 1
原创 POJ 1763
写得比较乱,以后再改吧,要注意做的时候,坐标系的确定方式。#include#include using namespace std;typedef struct _Node{ int row , col,index;}Node;typedef struct _Node2{ Node begin; Node end; int length; c
2011-06-17 16:37:00 994
原创 POJ 1788
虽然我AC了,但是我还是不大清楚是为什么。。。。好吧,我先留着,以后再好好看看。。。#include #include using namespace std;const int MAX = 100010;typedef struct _Node{ int x , y;}Node;Node data[MAX];int n;bool cmp1( c
2011-06-16 00:33:00 907
原创 POJ 1828
这题想得复杂了,其实只需要用一次排序就OK,我居然有树状数组+离散化了,太傻叉了。。。可是,还是过了,好吧,等下贴上简单AC的代码#include #include #include using namespace std;typedef struct _Node{ int x,y;}Node;typedef struct _Node2{ int o
2011-06-14 21:42:00 606
原创 POJ 1838
这里有普通的深度搜索就可以了,只是普通的深度搜索用的是Hash存放是否存在,我们却用有序表来代表。要注意的是,有序表可以用二分搜索来实现动态搜索,只是只能局限于动态删除,不能实现动态插入因为恐怕会有爆栈情况,所以用了非递归来实现。#include #include #include using namespace std;const int MAX = 17000;
2011-06-14 20:13:00 612
原创 POJ 1840
典型的静态搜索,可以用Hash做,但是近来练排序,就用排序做吧!顺便说一下,离线搜索,可以用Hash,也可以用排序深度优先搜索中,如果后面的搜索与前面的搜索不相关,则可以将两者分开来搜索。#include #include using namespace std;const int MAX = 20000;int cube[110];int A[MAX];i
2011-06-14 15:32:00 418
原创 POJ 2201(修正版)
在前一个代码中,由于在寻找一段区间的最大最小值,用朴素的搜索办法,故造成效率低下。后来,发现有个很好的RMQ的ST算法可以解决这个问题,果断使用之,结果AC,用时2454ms虽然花费时间更多,但证明了我之前的想法是对的,也让我学会了一个新算法ST算法!#include #include #include #include using namespace std;
2011-06-13 21:17:00 626
原创 POJ 2201
静态建树有两种方法,一是每次找出根节点是什么,递归建树即可,二是假设原来的是空树,一个一个地插入去。本题是后者,先贴一下前者代码,超时了,但感觉此做法是对的#include #include #include using namespace std;const int MAX = 50010;typedef struct _Node{ int k; i
2011-06-13 17:47:00 626
原创 POJ 2376
贪心+排序,值得好好研究#include using namespace std;const int MAX = 25000;typedef struct _Node{ int left; int right;}Node;Node data[MAX];void quicksort( int left , int right ){ int i =
2011-06-12 20:14:00 775
原创 poj 2380
为什么C++能过,G++不能过?这一题的数据量比较大,确实难入手#include#includeusing namespace std;const int MAX = 1000010;typedef struct _Node{ int row; int col; int value;}Node;int Array[MAX];Node
2011-06-12 15:55:00 943
原创 POJ 1318
超级水题,不说了。。。#include #include #include using namespace std;const int MAX = 200;typedef struct _Node{ char original[10]; char actual[10];}Node;Node data[MAX];void setactual( Node
2011-06-12 14:32:00 836
原创 POJ 1877
这一题其实可以写得很简单,只是对于差值的统计比较陌生,连续WA了5,6次才过了,我了个叉。。。#include using namespace std;const int MAX = 10000;int A[MAX];void quicksort( int left , int right ){ int i = left ; int j = right; in
2011-06-12 13:51:00 945
原创 看书计划
严重发现本人的看书效率其低,故每个月乃至每个星期,我都会在这里写下我的读书计划本月就只剩下21天了,我的主要任务,包括:①高数上册②数据结构复习共有3个星期左右了,加油!
2011-06-10 09:47:00 381
原创 PKU 2413
<br />#include <cstdio> #include <string> #include <vector> using namespace std; vector<string> data; char inputbuffer1[ 1024 ]; char inputbuffer2[ 1024 ]; void getnewstring( const string& left , const string& right ) { string result; int
2011-06-02 15:35:00 435
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人