![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ACM
南宮逸辰
喜欢听音乐,ACM旅途中
展开
-
POJ-3081-Children of the Candy Corn
这个题是一个DFS加BFS吧。大意是说给你一个迷宫,要求你求出从起点到终点的三种最短路径。第一种:选择尽量沿着左边的墙走,即优先考虑向左走。第二种:选择尽量沿着右边的墙走,即悠闲考虑向右走。第三种:无任何限制下的最短路径。这个题最后所求的步数起点和终点都要算入计数,即其求的是经过多少个方格。处理的方法是分别对于第一种和第二种进行优先逆时针和顺时针转一次方向进行搜索(保证其最原创 2013-02-18 07:33:19 · 393 阅读 · 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 · 856 阅读 · 0 评论 -
POJ-1475Pushing Boxes(貌似测试数据有问题)
今天刚好做到《数据结构编程实验》这本书中的图论部分,恰好遇到这个比较比较难的搜索题,本来最开始放弃的,但是后来想想觉得挺有意思的,就做了。我用的双重BFS的方法进行做,但交上去怎么都WA,最开始确实是有问题,修改后依然WA,后来通过比对书中光盘中所提供的测试数据,发现似乎并不是我代码的问题,某些数据给的答案是错的。我把代码贴出来吧,希望大家都看看到底错哪了。#include#includ原创 2013-02-16 23:52:19 · 5108 阅读 · 0 评论 -
POJ-1420-Spreadsheet
这个题其实就是一个模拟,可以题中内存限制却是10MB,读懂题发现按照题目所述需要的数组异常庞大,此外题目并无其他说明。题意比较好理解,大意就是给你一个表格,里面可能是数字或者表达式,你需要完成表达式中的计算,并输出整张表。在网上寻求别人做法的时候才发现居然数组只需要100*100就够了,唉~~~我的做法与它的类似,也是根据DFS去做,直接贴代码#include#include#in原创 2013-02-15 19:49:09 · 747 阅读 · 0 评论 -
HDU-1520-Anniversary party
今天算第一次看树形DP,网上找了资料,恰好有一个练习题,便仿着做了。方法其实比较简单,跟线性DP差不多,只是多了树的操作。直接贴代码:#include#include#include#define MAX 6001using namespace std;struct node{ struct node *first_child; struct node *ne原创 2013-02-08 03:23:24 · 347 阅读 · 0 评论 -
Codeforces Round #162 (Div. 2)总结
昨天没时间做,今天早上补做的。A题:题意是说给你一个字符串序列,同时给你一个命令序列。如果字符串序列的字符与命令序列的字符相等,则向前走一步。如果不等则不动。求最后你所处的位置,题目比较简单,代码:#include#includeint main(){ char stra[100],strb[100]; while(scanf("%s%s",stra,strb原创 2013-01-21 15:02:54 · 503 阅读 · 0 评论 -
Codeforces Round #161 (Div. 2)总结
这次Codeforces又悲剧了,做了前面2个题,后面2个题是后面做的。第三个题当时有个细节没有注意到,第四题是想成图论去了,后来才知道原来是DFS。A题:其实主要就是求将非0点移动到最中间的位置需要走多少步,这个分别求横坐标和纵坐标与最中间的绝对值差值之和就行了。 #include#include#include#define MAX 6int main()原创 2013-01-18 12:12:32 · 616 阅读 · 0 评论 -
POJ-2488-A Knight's Journey
这个题意思就是给你一个p*q的棋盘,问以中国象棋中的马的形式能否把棋盘中所有的点都走完(每个点只能走一次),如果能的话则输出每一步走的方法,不行则输出impossible.起点是任意的,也就是说搜索的时候枚举起点就OK我用的DFS做的,但是这里我认为在某些情况下走的方法应该不唯一,最开始我设置的movex,movey的数组值顺序不一样,得到不同的答案,但看到POJ上并没有标记为special原创 2013-02-17 14:42:14 · 358 阅读 · 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 · 623 阅读 · 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 · 309 阅读 · 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 · 317 阅读 · 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 · 2776 阅读 · 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 · 374 阅读 · 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 · 402 阅读 · 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 · 318 阅读 · 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 · 364 阅读 · 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 · 601 阅读 · 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 · 1137 阅读 · 0 评论 -
POJ-2838-Graph Connectivity
这个题也算是个搜索题吧,网上说可以用DFS做,双向链表做等等。我最终还是用的并查集做的,题目的意思就是说有N个点,Q表示询问两点是否连通,I表示将两点进行连通(相当于增加一个直接相连的路径),D表示删除两点之间直接相连的路径。并查集做的话只是每次删除的时候需要重新进行一个初始化,时间费的不是太多,C++ 900多MS吧代码:#include#include#define MAX原创 2013-02-19 23:58:07 · 631 阅读 · 0 评论 -
POJ-2823-Sliding Window
本来想看一个题的解题报告,无意中搜索到这个题,因为这个题主要是单调队列,所以就做了。关于单调队列请看:http://www.felix021.com/blog/read.php?1965最后再参考了这位大牛的博客:http://blog.csdn.net/hyogahyoga/article/details/7829830然后基本懂了,主要是觉得这位大牛实现得比较简单,膜拜~直原创 2013-02-20 01:13:11 · 421 阅读 · 0 评论 -
POJ-2946-The Warehouse
唉,终于做到书中图遍历系列的最后一个题了。题目的大意是说,你所处的一个迷宫,你只能走在有数字的方格(坐标)上,方格按照题目的意思是箱子,其为长方体(1*1*h),h即为其上面的数字。当然这里给你2种操作(方向都只有上下左右):1、走到旁边的数字方格上面去。2、推到你现在所站的方格,其向前倒下高度变为1.,当然前提是前面有足够多的'.'(出口E不能算作'.')即不能将箱子推到到E上面去。原创 2013-02-20 15:38:07 · 971 阅读 · 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 · 410 阅读 · 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 · 439 阅读 · 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 · 532 阅读 · 0 评论 -
Codeforces Round #171 (Div. 2)总结
A题: 题目是说按所给的漩涡形扩展下去,然后给你一个坐标,问到达该坐标需要转向几次。我的做法是将左边分为4个区域,然后分别对每个区域的2个边进行讨论求解就行了。对(1,0)点进行了特殊处理。代码:#include#include#include#includeusing namespace std;int x,y;int main(){ wh原创 2013-03-05 20:22:23 · 717 阅读 · 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 · 543 阅读 · 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 · 1024 阅读 · 0 评论 -
HDU-1003-Max Sum
简单的动态规划题。代码:#include#define MAX 100001typedef struct Number{ int num; int sum; int ipos;}Number;void main(){ int n,m,i,j,sum,ipos,result,summax; Number num[MAX]; whil原创 2013-03-07 21:45:08 · 551 阅读 · 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 · 504 阅读 · 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 · 540 阅读 · 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 · 493 阅读 · 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 · 476 阅读 · 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 · 568 阅读 · 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 · 2067 阅读 · 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 · 720 阅读 · 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 · 504 阅读 · 0 评论 -
HDU-1619-Unidirectional TSP
这个题属于一个比较简单的DP题,状态转移方程也就为其3个方向的转移,比较简单。需要注意上下边界的特殊处理。代码:#include#include#include#define MAX 102using namespace std;int m,n;int map[MAX][MAX],nxt[MAX][MAX];long long dp[MAX][MAX];int main原创 2013-02-27 15:05:02 · 904 阅读 · 0 评论 -
NSU-1241-麦森数
这个题是个高精度题,要求求2的k次方-1的后500位,不足的用0补,另外还要求计算2的k次方-1的位数。首先求位数可用公式进行计算,公式为n=k*log(10)2.0+1;然后写个高精度计算即可,最后只是需要注意换行的问题。这里分2种情况进行换行:1、当i%25==0的时候刚好是100位,因为每个数组我们存的4位。2、当i%25==12的时候,由1我们知道对于100的情况我们已原创 2013-02-27 12:06:32 · 1006 阅读 · 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 · 381 阅读 · 0 评论 -
POJ-1376-Robot
题目大意是给一个图,然后给你起点和终点,以及开始所处的方向,要求你求出从起点到终点的最小步数,如果无法到达则输出-1。这个题注意有4点:1、它一秒可以执行2种命令,一种是向现在所面向的方向走1-3步,另外一种是向左或向右90度转向(不能向后转)。2、图中为1的是障碍物,是不允许通过的,包括边界也不能允许,这一点需要注意下。3、对搜索进行去重操作的时候需要记录所处位置的方向,因为这个题存原创 2013-02-27 09:32:25 · 2784 阅读 · 0 评论