11 2012 档案

摘要:题目连接:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1347代码:/*顶点从0开始标号,工作地点在0,家在1。 * 先用dijkstra求出顶点1到每个点的最短路径。 * 结果记录在dist[]中。 * 然后DP思想求解答案。 * DFS搜索每一个顶点,要求这个点到1号点的距离大于前一个点到1号点的距离。 * 所谓前一个点就是从那个点搜到当前点的点。 * 每一步结果保存在ans[]中 */#include<stdio.h>#include<string.h& 阅读全文
posted @ 2012-11-15 12:53 小猴子、 阅读(3239) 评论(0) 推荐(0)
摘要:题目连接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1750题目大意:给出n个字典,接下来n行第一个是查看字典的时间,后面接的是这个成语,要求把每条成语连起来,以成语接龙的形式。字符串代表成语,如果第一个串的后4个字符与第二个串的前4个字符相等,那么说明它们能连起来,用的时间是第一个成语的时间,每组数据输入的第一个成语和最后一个成语为已知的。输出最少的时间,不能完成则输出-1.思路:转换成最短路。每个成语代表一个节点,如果两个成语能连起来那么就在这两个节点之间连一条路,权值为第一个成语的时间,求第一个成语到最后一条成语 阅读全文
posted @ 2012-11-13 23:56 小猴子、 阅读(585) 评论(0) 推荐(0)
摘要:题目连接http://acm.hdu.edu.cn/showproblem.php?pid=1698题目大意:给一个区间1-n,初始化每个值都是1,然后有m个操作,每个操作更新一个区间,输入3个数a, b, c.代表区间a,b的值更新为c。最后求总的值是多少。思路:线段树成段更新,每一次更新都不需要更新到底部(单点更新),而是更新到tree左端点等于a,右端点等于b即可。代码:#include<stdio.h>#include<string.h>#define MAXN 100002int tree[MAXN << 2]; //线段树。int color[M 阅读全文
posted @ 2012-11-12 15:38 小猴子、 阅读(374) 评论(0) 推荐(0)
摘要:题目连接http://poj.org/problem?id=1251代码#include<stdio.h>#include<stdlib.h>#include<string.h>int parent[257];int n, m;struct node { char u, v; int w;};struct node a[101];int cmp(const void *a, const void *b){ struct node c = *(struct node *)a; struct node d = *(struct node *)b; return 阅读全文
posted @ 2012-11-10 17:11 小猴子、 阅读(326) 评论(0) 推荐(0)
摘要:题目连接:http://poj.org/problem?id=1861题目描述:Andrew是某个公司的系统管理员,他计划为他的公司搭建一个新的网络。在新的网络中,有N个集线器,集线器之间可以通过网线连接。由于公司职员需要通过集线器访问整个网络,因此每个集线器必须能通过网线连接其他集线器(可以通过其他中间集线器来连接)。由于有不同长度的网线可供选择,而且网线越短越便宜,因此Andres所设计的方案必须确保最长的单跟网线的长度在所有方案中是最小的。并不是所有集线器之间都可以直接连接,但Andrew会提供集线器之间所有可能的连接。试帮助Andrew设计一个网络,连接所有的集线器并满足前面的条件。输 阅读全文
posted @ 2012-11-09 21:44 小猴子、 阅读(551) 评论(0) 推荐(0)
摘要:题目连接http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=203题目描述:给定平面上N个城市的位置,计算连接这N个城市所需线路长度总和的最小值。输入描述:输入文件中包含多个测试数据。每个测试数据的第1行为一个正整数N,0《=N《=100,代表需要连接的城市数目;接下来有N行,每行为两个实数X和Y,-10000《=X,Y《=10000,表示每个城市的X坐标和Y坐标。输入文件中最后一行为N=0,代表输入结束。输出描述:对输入文件中每个测试数据,计算连接所有城市所需线路长度总和的最小值。每对城市之间的线路为连接这两个城市的直线。对于 阅读全文
posted @ 2012-11-09 14:52 小猴子、 阅读(730) 评论(0) 推荐(0)
摘要:题目连接:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1286代码:#include<stdio.h>#include<limits.h>#include<string.h>#include<queue>using namespace std;int step[101][101][101]; //行,列,价值。step记录最小步数。char map[101][101];int n, m, tot;struct now { int 阅读全文
posted @ 2012-11-09 09:57 小猴子、 阅读(414) 评论(0) 推荐(0)
摘要:题目链接 http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1042思路:卒子所在行枚举答案,然后dfs求解。/* * hrbust1042过河卒 * 思路:卒子所在行枚举答案,然后进行不重复深搜。 */#include<stdio.h>#include<string.h>#include<algorithm>using namespace std; char res[10]; //记录卒子所在行的状态,用来枚举当前行。char map[6][10 阅读全文
posted @ 2012-11-07 00:22 小猴子、 阅读(442) 评论(0) 推荐(0)
摘要:题目连接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=649大致题意:求r到a最少用多长时间,走到‘.'的时间为1,走到‘x'的时间为2,’#‘不能走。代码:#include<stdio.h>#include<string.h>#include<limits.h>#include<algorithm>#include<queue>using namespace std;#define M 201char map[M][M]; //存放地图。int 阅读全文
posted @ 2012-11-04 17:32 小猴子、 阅读(277) 评论(0) 推荐(0)
摘要:题目连接http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1317题目大意 如何根据一系列堆栈操作实现回文构词法呢?有两种堆栈的操作,将单词TROT转换成TORT。 i代表入栈,o代表出栈。对给定的单词对,编程实现堆栈操作,将第一个单词转换为第二个单词。 有多行输入。每两行的第一个是源单词(不包括换行符),第二行是目标单词(也不包括换行符)。由文件结束符标志输入结束。 对每对单词,有多种有效的方法从源单词产生目标单词,将每种方法的i和o操作排序输出,并以[]分隔。排序的方法是字典序。 阅读全文
posted @ 2012-11-03 22:58 小猴子、 阅读(488) 评论(0) 推荐(0)
摘要:题目连接:http://poj.org/problem?id=1979大致题意:给出两个数m和n,代表n行m列,都不超过20,然后是n行m列的图,包括'.' , '#' , '@'3个字符。@代表你的位置,'.'代表通路,‘#’代表墙,问你最远不回头能走几个‘.' 。‘@’算一个。输入0 0 结束。题意本不是这样,被我该了。。。意思不变#include<stdio.h>#include<string.h>char map[22][22];int m, n, ans;int dir[4][2] = { 阅读全文
posted @ 2012-11-03 18:25 小猴子、 阅读(542) 评论(0) 推荐(0)
摘要:题目链接http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1412大致题意:按照题目给出的几个正方形拼成一个矩形,每个小正方形中间有个管子,问拼成的矩形有多少个能通的管子。思路:dfs#include<stdio.h>#include<string.h>#define I (i*3)#define J (j*3)char str[51][51];int map[159][159];int n, m;int dir[4][2] = { {0, 1}, {0, -1}, {-1, 0}, {1, 0}};v 阅读全文
posted @ 2012-11-02 23:22 小猴子、 阅读(313) 评论(0) 推荐(0)
摘要:题目链接http://poj.org/problem?id=2406大致题意:题目要我们求出一个字符串得最大循环长度!做过了poj1961这个题就一点问题都没有了要知道next数组的含义和 if(i % (i-j) == 0 && i / (i-j) > 1)的含义,我在上篇解题报告上贴了,也就是poj 1961中。直接贴代码吧#include<stdio.h>#include<string.h>char str[1000002];int next[1000002];int main(){ while(scanf("%s", s 阅读全文
posted @ 2012-11-02 12:36 小猴子、 阅读(308) 评论(0) 推荐(0)
摘要:题目链接 http://poj.org/problem?id=1961大致题意:给出一个串,输出第i位之前的串是由多少个相同的子串组成的。输出i的子串的个数。思路:在next数组中加一句判断即可if(i%(i-j) == 0 && i/(i-j) > 1) { printf("%d %d\n", i, i/(i-j));}这条语句是什么意思?要了解next数组的求法,那么就不难理解了。对于 i%(i-j) == 0遍历到第i个字符,前面字符串的长度为i,且前面字符串的前缀和后缀相等的字符的个数是j个。如果想要得到像题意那样的序列,则j必满足j》=i/2 阅读全文
posted @ 2012-11-01 20:19 小猴子、 阅读(380) 评论(0) 推荐(0)