
POJ
南宮逸辰
喜欢听音乐,ACM旅途中
展开
-
POJ-1475Pushing Boxes(貌似测试数据有问题)
今天刚好做到《数据结构编程实验》这本书中的图论部分,恰好遇到这个比较比较难的搜索题,本来最开始放弃的,但是后来想想觉得挺有意思的,就做了。我用的双重BFS的方法进行做,但交上去怎么都WA,最开始确实是有问题,修改后依然WA,后来通过比对书中光盘中所提供的测试数据,发现似乎并不是我代码的问题,某些数据给的答案是错的。我把代码贴出来吧,希望大家都看看到底错哪了。#include#includ原创 2013-02-16 23:52:19 · 7564 阅读 · 0 评论 -
POJ-3081-Children of the Candy Corn
这个题是一个DFS加BFS吧。大意是说给你一个迷宫,要求你求出从起点到终点的三种最短路径。第一种:选择尽量沿着左边的墙走,即优先考虑向左走。第二种:选择尽量沿着右边的墙走,即悠闲考虑向右走。第三种:无任何限制下的最短路径。这个题最后所求的步数起点和终点都要算入计数,即其求的是经过多少个方格。处理的方法是分别对于第一种和第二种进行优先逆时针和顺时针转一次方向进行搜索(保证其最原创 2013-02-18 07:33:19 · 420 阅读 · 0 评论 -
POJ-2935-Basic Wall Maze
这个题用BFS搜索,题目大意是给你6*6的网格,其中第一行的2个数据表示起点,第二行的2个数据表示终点,第三行开始有3行,表示一道墙(可以当作一条线),有墙的地方相应不能通过。主要就是对墙需要特殊处理下。我采用的是用数组存是否该点能够上下左右通行,如果不能则map[i][j][k]=1(i,j)为该点坐标。求起点到终点的路线,用N,E,S,W代表东西南北,表示走的方向。处理方法:1、首先对原创 2013-02-17 02:07:57 · 891 阅读 · 0 评论 -
POJ-1420-Spreadsheet
这个题其实就是一个模拟,可以题中内存限制却是10MB,读懂题发现按照题目所述需要的数组异常庞大,此外题目并无其他说明。题意比较好理解,大意就是给你一个表格,里面可能是数字或者表达式,你需要完成表达式中的计算,并输出整张表。在网上寻求别人做法的时候才发现居然数组只需要100*100就够了,唉~~~我的做法与它的类似,也是根据DFS去做,直接贴代码#include#include#in原创 2013-02-15 19:49:09 · 779 阅读 · 0 评论 -
POJ-2488-A Knight's Journey
这个题意思就是给你一个p*q的棋盘,问以中国象棋中的马的形式能否把棋盘中所有的点都走完(每个点只能走一次),如果能的话则输出每一步走的方法,不行则输出impossible.起点是任意的,也就是说搜索的时候枚举起点就OK我用的DFS做的,但是这里我认为在某些情况下走的方法应该不唯一,最开始我设置的movex,movey的数组值顺序不一样,得到不同的答案,但看到POJ上并没有标记为special原创 2013-02-17 14:42:14 · 389 阅读 · 0 评论 -
POJ-3009-Curling 2.0
这个题依然是一个DFS题,类似冰球。其中注意的地方就是你撞击一个阻碍物需要停留在它前面,然后该阻碍物被你撞碎。求的为起点到终点的最小步数,不算难,直接贴代码。#include#include#include#define MAX 21using namespace std;int map[MAX][MAX],sx,sy,ex,ey,w,h,ans;int movex[4]={1原创 2013-02-19 00:48:30 · 398 阅读 · 0 评论 -
POJ-1416-Shredding Company
这个题也是DFS题。大意是说给你2个数,第一个为目标数,第二个为你要处理的数,要求将第二个数进行分割,使得各部分之和最接近目标数且必须小于目标数。其实一个DFS就可以做出来,中间注意下数中的0的特殊处理,因为0也可以占位的,输出rejecter需要注意下直接代码吧:#include#include#includeusing namespace std;long long g原创 2013-02-19 16:05:56 · 654 阅读 · 0 评论 -
POJ-1068-Parencodings
题目比较简单,直接模拟即可。#include#include#include#includeusing namespace std;int main(){ int cas; scanf("%d",&cas); while(cas--) { int n,lastm=0; scanf("%d",&n); string str; for(int i=0原创 2013-02-19 18:04:18 · 330 阅读 · 0 评论 -
POJ-1338-Ugly Numbers
这个题也比较简单,我是学STL顺便做的,直接上代码吧。#include#include#include#include#define MAX 1501using namespace std;int main(){ long long result[MAX]; priority_queue, vector >,greater > > Q; Q.push(ma原创 2013-02-19 18:30:17 · 346 阅读 · 0 评论 -
POJ-1208-The Blocks Problem
这个题属于一个模拟题,就是模仿一个积木游戏,具体翻译可以参考:http://www.cnblogs.com/devymex/archive/2010/08/04/1792128.html其实按照题目意思进行相应的模拟就可以了,比较简单吧。代码:#include#include#include#define MAX 30using namespace std;int n原创 2013-03-03 15:04:57 · 2826 阅读 · 0 评论 -
POJ-2823-Sliding Window
本来想看一个题的解题报告,无意中搜索到这个题,因为这个题主要是单调队列,所以就做了。关于单调队列请看:http://www.felix021.com/blog/read.php?1965最后再参考了这位大牛的博客:http://blog.youkuaiyun.com/hyogahyoga/article/details/7829830然后基本懂了,主要是觉得这位大牛实现得比较简单,膜拜~直原创 2013-02-20 01:13:11 · 447 阅读 · 0 评论 -
POJ-3256-Cow Picnic
这个题比较水吧,很简单的一个DFS题。大意是说,有N个农场,上面有k个奶牛,农场之间存在一些有向路径,问你N个农场中有多少个农场是所有奶牛能够到达的。先找出每个农场能够到达的奶牛数,然后判断其是否等于k,然后输出满足要求的农场的个数代码:#include#include#include#define MAX 1001#define MAXV 10001using name原创 2013-02-20 23:28:19 · 628 阅读 · 0 评论 -
POJ-1002-487-3279
这个题是个模拟题,给你一系列电话号码的形式,要求你统计出合法电话号码,并统计其个数代码:#include#include#include#include#include#include#define MAX 100001using namespace std;map a;int GetNumber(char c){ if(c<='O') return (c-'原创 2013-02-20 01:20:19 · 343 阅读 · 0 评论 -
POJ-2946-The Warehouse
唉,终于做到书中图遍历系列的最后一个题了。题目的大意是说,你所处的一个迷宫,你只能走在有数字的方格(坐标)上,方格按照题目的意思是箱子,其为长方体(1*1*h),h即为其上面的数字。当然这里给你2种操作(方向都只有上下左右):1、走到旁边的数字方格上面去。2、推到你现在所站的方格,其向前倒下高度变为1.,当然前提是前面有足够多的'.'(出口E不能算作'.')即不能将箱子推到到E上面去。原创 2013-02-20 15:38:07 · 1009 阅读 · 0 评论 -
POJ-2838-Graph Connectivity
这个题也算是个搜索题吧,网上说可以用DFS做,双向链表做等等。我最终还是用的并查集做的,题目的意思就是说有N个点,Q表示询问两点是否连通,I表示将两点进行连通(相当于增加一个直接相连的路径),D表示删除两点之间直接相连的路径。并查集做的话只是每次删除的时候需要重新进行一个初始化,时间费的不是太多,C++ 900多MS吧代码:#include#include#define MAX原创 2013-02-19 23:58:07 · 671 阅读 · 0 评论 -
POJ-1008-Maya Calendar
很简单的一个模拟题代码:#include #include using namespace std; string m1[19]={"pop","no", "zip", "zotz", "tzec", "xul", "yoxkin", "mol", "chen", "yax", "zac", "ceh", "mac", "kankin", "muan", "pax", "koyab"原创 2013-02-20 01:24:23 · 390 阅读 · 0 评论 -
POJ-3044-City Skyline
这个题属于贪心,看懂题就简单了。就是说给你一个天际线的图(以坐标形式)问你最少有多少栋楼代码:#include#include#define MAX 1000001int x[MAX],y[MAX];bool use[MAX];int main(){ int n,w; while(scanf("%d%d",&n,&w)!=EOF) { memset(u原创 2013-02-21 00:08:08 · 1175 阅读 · 0 评论 -
POJ-3268-Silver Cow Party
描述:块田中(1≤N≤1000)都有1只牛去参加盛大的母牛聚会,这个聚会被安排在X号田(1≤X ≤N)。一共有M( 1≤M≤100,000)条单行道分别连接着两块田,且通过路i需要花Ti(1≤Ti≤100)的时间。每头母牛必需参加宴会并且在宴会结束时回到自己的田地,但是每头牛都很懒而喜欢选择化是最少的一个方案。来时的路和去时的可能不一样。求每头牛要来回的最短时间。找出来回路程最长的。输原创 2013-03-04 21:09:57 · 425 阅读 · 0 评论 -
POJ-1273-Drainage Ditches
赤裸裸的网络流- - 代码:#include#include#includeusing namespace std;int map[200][200],q[200];int BFS(int star,int end){ int flat[200]; int e; queueque; memset(flat,0,sizeof(flat));原创 2013-03-05 20:12:18 · 429 阅读 · 0 评论 -
POJ-1321-棋盘问题
一个比较简单的DFS题,搜索下就可以了。注意其中的细节问题。代码:#include#include#include#define MAX 9using namespace std;char map[MAX][MAX];int ans,n,k,count;bool vis[MAX];void DFS(int index){ if(index>=n) return;原创 2013-03-06 19:49:30 · 460 阅读 · 0 评论 -
POJ-3984-迷宫问题
一道比较简单的BFS题代码:#include#include#include#include#define MAX 6using namespace std;int map[MAX][MAX],px[MAX][MAX],py[MAX][MAX];int movex[4]={1,-1,0,0},movey[4]={0,0,1,-1};bool vis[MAX][MAX];b原创 2013-03-07 20:48:56 · 1049 阅读 · 0 评论 -
POJ-2362-Square
一般的DFS题,求所给N条边,是否可以组成一个正方形代码:#include#include#include#define MAX 21using namespace std;int n,m,flag,a[MAX],vis[MAX];void DFS(int sum,int s,int index){ if(sum>m||flag||index>4) return;原创 2013-03-07 20:17:16 · 570 阅读 · 0 评论 -
POJ-1664-放苹果
简单的DFS搜索题代码:#include#include#include#define MAX 11using namespace std;int a[MAX],n,m,ans;void DFS(int index,int res){ if(index==m) { if(res>=a[m-1]) { ans++; } return;原创 2013-03-07 22:18:31 · 528 阅读 · 0 评论 -
HDU-1231-最大连续子序列
比较简单的动态规划题代码:#include#include#define MAX 10001int a[MAX],pre[MAX],sum[MAX];int main(){ int n; while(scanf("%d",&n)&&n) { memset(pre,0,sizeof(pre)); int flag=0; for(int i=1;i<=n原创 2013-03-07 21:43:07 · 553 阅读 · 0 评论 -
POJ-2488-A Knight's Journey
DFS题代码:#include#include#includeusing namespace std;int p,q,map[9][9],use[9][9],ansx[9*9],ansy[9*9],ans,movex[8]={-1,1,-2,2,-2,2,-1,1},movey[8]={-2,-2,-1,-1,1,1,2,2};bool isborder(int x,int y)原创 2013-03-09 11:26:33 · 499 阅读 · 0 评论 -
POJ-1753-Flip Game
这个题大意是说你可以任意翻转一个点,然后它所在的上下左右(如果存在)也会跟着翻转,问将其翻转成全部一致最少需要多少次。用BFS搜索做吧。代码:#include#include#include#include#includeconst int MAX=(1<<16)+1;const int res=(1<<16)-1;using namespace std;bool vi原创 2013-03-09 12:23:35 · 586 阅读 · 0 评论 -
POJ-1731-Orders
第一次看到STL里面有全排列函数,受教了代码:#include#include#include#include#define MAX 201using namespace std;char str[MAX],ita[MAX];bool vis[MAX];int len;int main(){ while(scanf("%s",str)!=EOF) {原创 2013-03-08 15:43:00 · 743 阅读 · 0 评论 -
POJ-1562-Oil Deposits
这个题就是说以@代表油田,它周边8个方向若有@则表示同一个油田。给你一个图,问你图中有多少个油田。算是比较简单的DFS题,直接进行搜索, 只是注意对已经搜索过的点进行标记操作。代码:#include#include#include#define MAX 101using namespace std;int n,m,ans;char map[MAX][MAX];bool v原创 2013-03-09 19:15:24 · 2097 阅读 · 0 评论 -
POJ-2965-The Pilots Brothers' refrigerator
跟POJ的1753很像,只是题目一些条件改了, 首先应该将所有都变成+号,而且改变当前位置的状态,所在行和列都要相反转化。同样BFS可以求解。代码:#include#include#include#include#includeconst int MAX=(1<<16)+1;const int res=(1<<16)-1;using namespace std;bo原创 2013-03-09 19:46:46 · 567 阅读 · 0 评论 -
POJ-1330-earest Common Ancestors
题目比较简单,直接上代码代码:#include#include#include#define MAX 10001using namespace std;int f[MAX];bool vis[MAX];int main(){ int cas; scanf("%d",&cas); while(cas--) { int n; scanf("%原创 2013-03-08 18:44:24 · 516 阅读 · 0 评论 -
POJ-1014-Dividing
用DFS可以做吧, 注意剪枝代码:#include#include#includeusing namespace std;int a[7],sum,flag;void DFS(int num){ if(flag) return; if(sum==num) { flag=1; return; } for(int i=6;i>=1;原创 2013-03-09 21:27:42 · 535 阅读 · 0 评论 -
POJ-1144-Network
这个题是个模板题吧,就是求割点的个数,直接代码吧。代码:#include#include#include#define MAX 2001using namespace std;int n,e,t,root,pnt[MAX],head[MAX],nxt[MAX],vis[MAX],cut[MAX],dfn[MAX],low[MAX];void add(int u,int v)原创 2013-02-27 10:45:21 · 407 阅读 · 0 评论 -
POJ-1376-Robot
题目大意是给一个图,然后给你起点和终点,以及开始所处的方向,要求你求出从起点到终点的最小步数,如果无法到达则输出-1。这个题注意有4点:1、它一秒可以执行2种命令,一种是向现在所面向的方向走1-3步,另外一种是向左或向右90度转向(不能向后转)。2、图中为1的是障碍物,是不允许通过的,包括边界也不能允许,这一点需要注意下。3、对搜索进行去重操作的时候需要记录所处位置的方向,因为这个题存原创 2013-02-27 09:32:25 · 2827 阅读 · 0 评论 -
POJ-1017-Packets
这个题算比较简单的模拟吧,要求计算把6种规格的箱子进行装箱所需要的最少的箱子数分别先弄清楚每种箱子放到最大箱子里面的情况,以及剩余部分还可以放多少其他箱子,然后一写应该就OK了代码:#include#include#define MAX 7int cnt[MAX];int change(int index,int res){ if(cnt[index]>=res)原创 2013-02-26 16:53:21 · 449 阅读 · 0 评论 -
POJ-1041-John's trip
这个题是一个比较简单的欧拉回路题,最开始没有注意到是special judge,所以一直觉得WA,结果交上去AC。一个DFS就可以搞定。代码:#include#include#include#include#define MAX 2000int map[MAX][MAX],cnt[MAX],vis[MAX],ver[MAX][MAX],ans[MAX],top;usin原创 2013-02-26 14:50:12 · 485 阅读 · 0 评论 -
POJ-1132-Border
这个题是一个比较简单的模拟题吧,题目给你一个起点,然后给你一系列路径,要求你按照题目要求,相当于以X的形式给它围上一个圈代码:#include#include#include#define MAX 32char map[MAX][MAX];int main(){ int cas,cass=1; scanf("%d",&cas); while(cas-原创 2013-02-24 23:26:16 · 650 阅读 · 0 评论 -
POJ-3259-Wormholes
这个题就是给你一个图,让你判断其中是否存在负权回路。用SPFA就可以~代码:#include#include#include#include#define MAXE 6000#define MAXV 501using namespace std;int head[MAXV],pnt[MAXE],nxt[MAXE],cost[MAXE],vis[MAXV],cnt[MA原创 2013-02-22 00:00:19 · 399 阅读 · 0 评论 -
Codeforces Round #172 (Div. 2)总结
同样今天补的,A:就是将第一个字母变成大写,水题~代码:#include#include#define MAX 1001char str[MAX];int main(){ while(scanf("%s",&str)!=EOF) { if(str[0]>='a'&&str[0]<='z') str[0]='A'+str[0]-'a'; print原创 2013-03-11 21:06:39 · 983 阅读 · 0 评论 -
POJ-1459-Power Network
一个网络流的基础题吧,仿着书上做的,直接贴代码吧,比较简单代码:#include#include#include#include#define MAX 110using namespace std;int n,np,nc,m,s,t;int fa[MAX],q[MAX],f[MAX][MAX],c[MAX][MAX];void proc(){ int qs,qt,原创 2013-02-27 19:03:30 · 331 阅读 · 0 评论 -
POJ-1061-青蛙的约会
搞的很蛋疼~代码:#include#include#includeusing namespace std;long long x,y,m,n,L;long long exgcd(long long m,long long &x,long long n,long long &y){ int x1,y1,x0,y0; x0=1,y0=0; x1=0,y1=1原创 2013-03-12 21:01:03 · 737 阅读 · 0 评论