自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

藏经阁 | 玄苦

技术博客: https://chenguolin.github.io/

  • 博客(41)
  • 资源 (2)
  • 收藏
  • 关注

原创 【ICPC-345】uva 101 - The Blocks Problem

点击打开链接 题目意思: 在早期人工智慧的領域中常常會用到機器人,在這個問題中有一支機器手臂接受指令來搬動積木,而你的任務就是輸出最後積木的情形。 (編號從0到n-1)0號積木放在0號位置上,1號積木放在1號位置上 機器手臂有以下幾種合法搬積木的方式(a和b是積木的編號) move a onto b 在將a搬到b上之前,先將a和b上的積木放回原來的位置(例如:1就放回1的最開始位罝) m...

2012-07-22 12:43:26 1068

原创 【ICPC-79】uva 10562 - Undraw the Trees

点击打开链接 题目意思: 给定一个多叉树的图,要求把图转化为一颗树,最后输出相应的内容。 解题思路: 1 建树 + 前序遍历输出 。这题的输入就是一个很麻烦的事了,我是采用一个二维的char数组来存储读入的图,但是建树的过程我花了一天的时间一直没有成功,不懂为什么(本人比较菜逼) 2 递归输出 。对于题目的输入其实就是一颗已经建好的树,我么只需要去...

2012-07-20 01:40:41 1083

原创 【ICPC-344】uva 127 - "Accordian" Patience

点击打开链接 题目意思: 给定52张的扑克牌,现在要求对扑克牌进行整理,对于每一张扑克牌,如果左边的第三张存在那么就去判断这一张是否和第三张满足花色或卡片值相同,如果满足则把这一张移动到左边的第三张,否则去判断左边的第一张是否和这一张满足条件;如果左边的第三张不存在那么只要去判断左边的第一张即可。最后输出剩下的扑克牌的堆数,并且输出每一堆的牌数 解题思路: 我们知道对于一张扑克牌有它的花色...

2012-07-20 01:11:05 1616

原创 【ICPC-351】uva 11111 - Generalized Matrioshkas

点击打开链接 题目意思: 这一题题目真心不好看懂,所以呢,我就大概描述一下,题目是说有一个娃娃大小为k可以拆成 -k 和 k ,然后娃娃里面可以嵌套物品,但是规定内层娃娃的大小是不能超过 外层的大小的, 现在给定一个娃娃的尺寸大小序列,左边的是负数,问我们这个序列是不是一个物品所拆开的,相应输出题目所要求的内容。 解题思路:1:这一题和括号匹配非常像,只是多了一个判断内层的大小和外层...

2012-07-18 01:32:26 1758

原创 【ICPC-175】uva 208 - Firetruck

点击打开链接 题目意思: 有一个城市发生了火灾,现在给定一个目标节点,然后给定一序列节点间的关系,然后每一次都从节点1开始,问我们从节点1到目标节点共有几条路径,并且最后打印出这些路径。 解题思路: 分序一下复杂度,对于最多有21个节点的解空间树来说,对于这颗树的每一层就是21种情况,最坏的情况是搜索到叶子节点,那么这个时候的时间复杂度是非常大,直接回溯肯定是TLE的,那...

2012-07-18 01:05:49 1848

原创 【ICPC-178】uva 10012 How Big Is It?

点击打开链接 (这个链接到BNUOJ上面是一样的) 题目意思: 给定m个圆的半径,现在要求找到一个矩形使得每一个球都以地面相切,要求输出最小的矩阵的长度 解题思路: 最小的圆排列问题,对于这样的一个图形我么是转化为坐标来计算,那么我们需要做的三个步骤就是 1 递归去放入每一个圆 2 求出每一个圆的圆心的横坐标 3计算最小的长度 。 具体过程见代码分析: 代码: #...

2012-07-17 11:54:07 969

原创 【ICPC-177】uva 301 - Transportation

点击打开链接 题目意思: 有一辆车从A城市开往B城市,途中有m个站,车上最多的载客人数为n人,每一个站的价格就是终点和起点的差值,现在有k分订单,要求找到这辆车的最大利润 解题思路: 这一题如果我们去搜索站点,那么情况将会非常糟糕,但是如果我么去搜索订单,那么对于每一个订单而言就是取和不取,那么我们就可以知道这个解空间树的每一层就是一个订单,那么我们只要对这个订单编号,然后...

2012-07-17 00:20:34 1266

原创 【ICPC-195】uva 193 - Graph Coloring

点击打开链接 题目意思: 给定n个节点,节点的编号为1-n,在给定m个节点链接的信息,现在要求对节点图色,只有两种颜色可以黑色和白色并且相邻的节点不能同时为黑色但是可以为白色,要求黑色节点最多的个数,以及一组节点的编号 解题思路: 对于节点而言,每一个节点就是两种情况,白色或黑色,那么我们知道这一个解空间树的每一层就是一个节点,那么我们只要去搜索这个解空间就可以了,这一题的数据...

2012-07-17 00:05:43 1336

原创 【ICPC-194】uva 10344 - 23 out of 5

点击打开链接 题目意思:给定5个数,还有三种运算符 * + - ,问我们是否能够由这些数和运算符最后的值为23。 解题思路:我们知道5个数的全排列为5!种,那么我们只要去枚举这个全排列中每一个排列进行搜索,是否有23点出现有的话标记ans为1,直接退出。(注意必须全排列的查找,不能只按输入的顺序) 代码: //计算5个数3个运算符能否组成23点 //我们知道5个数...

2012-07-16 23:58:06 2814

原创 【ICPC-193】uva 140 - Bandwidth

点击打开链接 题目意思:给定n个节点,(n<=8),节点的编号为A~Z 来表示,要求找到一个节点的序列,使得该序列最大的节点的Bandwidth为所有序列中的最小值,(节点的Bandwidth是指和它所连接的点中和它距离最大的值)。 解题思路:由于最多只有8个节点,那么可以枚举这个解空间的所有情况,然后找到其中的最有解并且记录下它的节点顺序,那么我们可以通过求全排列的方法去一...

2012-07-16 01:17:48 1177

原创 【ICPC-192】uva 167 - The Sultan's Successors

点击打开链接 题目意思:给定8 x 8的一个方格,对于该方格来说每一行上面只能取一个数,然后同行同列同对角线上都是不满足,求出所能得到的最大值 解题思路:8皇后的变形问题,变为求解所有方案数中的最大的和。我们先分序一下,该解空间的结构,由于每一行只能取一,那么我么就可以知道每一行对应的是解空间的一层,那么我么就可以去搜索这个解空间状态树,从第一行开始搜索,如果行数大于8就retur...

2012-07-16 01:00:47 1411

原创 【ICPC-191】uva 331 - Mapping the Swaps

点击打开链接 题目意思:给定一个无序的序列,要求找到一个交换次数最少的方案使得序列为有序列,然后再找到以该最少次数为方案的总数是多少,输出方案数 解题思路:根据冒泡排序的方法,我们将可以得到最少的交换次数,然后问我们在这个次数下的交换方式有几种。我们可以利用冒泡排序的思想,就是我们每一次递归下去的时候都从0这个点开始搜索,只要有递归就判断当前的序列是否排好序,如果序列排好那么ans...

2012-07-16 00:43:03 1203

原创 【ICPC-190】uva 639 - Don't Get Rooked

点击打开链接 题目意思:给定一个最大为4x4的棋盘,棋盘上面可以放着车还有代表墙的'X',要求对于两个车是不能够连成一条直线的,就是中间有'X'或者是两个的连线为折线 解题思路:1 暴力枚举解空间,求出解空间的最大的值 2 回溯法,通过试探每一点的放与不放,还有判断是否能够满足条件求出最后的最大值 代码1(暴力枚举): //暴力枚举2^16种解 //我们知道对...

2012-07-15 09:26:57 1063

原创 【ICPC-123】uva 10474 - Where is the Marble?

点击打开链接 代码: //只要对输入的数据排序,然后查找即可(可用二分,更快) #include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #include <list> #include <vector> #inc...

2012-07-15 09:18:11 800

原创 【ICPC-189】uva 216 - Getting in Line

点击打开链接 题目意思:给定n个点,求出点之间的最小的距离之和 解题思路:1 利用单源最短路算法 2 枚举点构成序列的全排列,求出所有排列的中的最小,并且记录下对应点的位置 代码: //要求单源最短路径,对于这一题我们知道点的个数最多为8,那么我们可以采用枚举每个点的顺序位置,就是去枚举这个点全排列,然后得到最小值,并且保存下序列的位置 #include &lt...

2012-07-15 09:16:20 1261

原创 【ICPC-188】uva 539 - The Settlers of Catan

点击打开链接 题目意思:给定n个节点,编号为0--n-1,在给定m条边,要求一条最长的路径 解题思路 回溯搜索每一点的最长的路径 代码: //求解最长的路径长度,给个的是一个无向的图,那么我们可以用回溯法去做,只要去试探每一个点的最长的路径,然后得到最大的即可。 #include <iostream> #include <cstdio> #...

2012-07-15 09:09:46 1322

原创 【ICPC-124】uva 全排列题目 146 + 729 + 10098

解题思路: 对于全排列的问题,STL,提供了一个强大的函数, bool next_permutation(iterator.begin() , iterator.end()); 对于当前的序列如果不是最后一个序列则返回真,否则返回假。 uva ...

2012-07-14 00:56:33 1417 5

原创 【ICPC-125】uva 10167 - Birthday Cake

点击打开链接 题目意思:给定一个半径为100的蛋糕,蛋糕上面有许多的樱桃,现在要求一次性平均分蛋糕,并且对应的樱桃的数量要相等。要求这个均分的直线AX+BY = 0的A 和 B的一个解 解题思路:题目规定半径的值,还有A B 的范围,我们知道一条直线能够将点平均分成两半 ,点不会落在直线上,那么我们知道对于点带入直线如果值大于0则点在直线上方,反之在下方。 只要慢足上方的点等于下...

2012-07-14 00:42:46 1218 2

原创 【ICPC-444】快速幂

1//整数的快速幂 m^n % k 的快速幂: long long quickpow(long long m , long long n , long long k){ long long ans = 1; while(n){ if(n&1)//如果n是奇数 ans = (ans * m) % k; ...

2012-07-13 01:00:59 1667

原创 【ICPC-238】hdu 1575 Tr A

点击打开hdu 1575 思路: 矩阵快速幂 分析: 1 题目给定一个n*n的矩阵要求矩阵的k次幂之后的矩阵的对角线的和 2 矩阵快速幂的裸题 代码; /************************************************ * By: chenguolin * * Date: 2...

2012-07-13 00:35:12 2117

原创 【ICPC-237】hdu 1757 A Simple Math Problem

点击打开链接 思路:矩阵快速幂 分析: 1 裸题 代码: /************************************************ * By: chenguolin * * Date: 2013-08-23 * * Address: h...

2012-07-13 00:28:36 3500

原创 【ICPC-187】uva 10596 - Morning Walk

点击打开链接 题目意思:给定n个点,判断由某一点出发最后能否回到原点 解题思路:比较简单的欧拉回路的应用,根据欧拉回路的性质,所有节点的度数(入度加出度)都是偶数,我么只须要开一个road数组存储每一个节点的度数,最后遍历数组判断是不是全部都是偶数即可 代码: //简单的欧拉回路的应用 #include <iostream> #include...

2012-07-12 00:23:05 1121

原创 【ICPC-186】uva 10129 - Play on Words

点击打开链接 题目意思:给定n个单词,要求单词的第一个字母和前一个单词的最后字母相同(除了第一个),判断所有单词是否可以连成一条链。 解题思路:题目很明显是一个有关欧拉路的问题,我们先了解一下有关欧拉道路和欧拉回路的区别。欧拉道路是分为有向和无向两种,对于欧拉道路上的节点有两种度,入度和出度,入度表示进入该节点次数,出度表示出去该节点的次数,对于一条普通的有向欧拉道路来说存在一个起...

2012-07-12 00:13:57 1273

原创 【ICPC-301】uva 10557 - XYZZY hdu 1317

点击打开链接uva10557 点击打开链接hdu 1317 思路:SPFA+dfs 分析: 1 题目的图是一个有向图,并且可能存在环。第一个点的能量值为100,边的权值利用能量大小,例如2点为-60,如果1->2那么value[1][2] = -60 2 题目明确指出如果是要win的话,那么必须是经过的每条边都要大于0.那么我们只要把那些经过松弛操作后的点大于0的入队即可,小于等于...

2012-07-10 23:41:07 1767

原创 【ICPC-350】uva 11234 - Expressions

点击打开链接 题目意思:给定一个字符串表示是一个表达式,要求使用队列代替栈的方法来输出结果。 解题思路:我们知道对于这个表达式,最后一个肯定是大写字母,对于每一个大写字母会跟着两个小写的字母或大写字母,那我们联想到二叉树,我们可以建立一颗二叉表达式的树,怎么建呢,一下代码详解,最后我们只要从最后一层从左往右这样输出即可,要求用到树的层次遍历(就是广搜),同时需要用一个list来存储节点的值,最...

2012-07-10 23:25:49 1272

原创 【ICPC-185】uva 10004 - Bicoloring

点击打开链接 题目意思:给定n个节点,还有l条边,每一个节点只有两种颜色可以上,但只能选择一种,并且要求相邻的节点之间不能有相同的颜色,判断给定的数据是否满足,如果满足 #include <iostream> #include <cstdio> #include <cstring> #include <queue> ...

2012-07-10 23:15:44 909 2

原创 【ICPC-184】uva 532 - Dungeon Master

点击打开链接 题目意思:给一个三维的地图,然后在地图里面有一个起点S 和终点E ,问是否能够找到一条路径从S到达E。如果能够找到就输出步数,如果不能就输出Trapped!。 解题思路:对于三维的地图和二维的一样,只是我们搜索时候多了两个竖直的方向。就是dir数组为dir[6][3],然后对于求解路径我们一般用BFS,然后用一个flag变量标记是否能够走到E,这样即可. 代码...

2012-07-08 20:51:54 981

原创 【ICPC-33】uva 10305 - Ordering Tasks

点击打开链接 题目意思:给定两个数n , m .n是任务的编号从1~n, m则是有m个关系式.求出一种做该任务的顺序(答案不唯一)。 解题思路:这一题是很简单的拓扑排序,直接利用拓扑排序的模板,然后注意输出就可以了。 代码: //直接利用拓扑排序的模板 #include <iostream> #include <cstdio> #include <cs...

2012-07-08 17:50:19 1000

原创 【ICPC-183】uva 784 - Maze Exploration

点击打开链接 题目意思:给定一个房间,房间四周都是封闭的,但是房间里面会有相通的门,开始里面有个点要求从这个点开始能够填到的地方全部标记为#,包括自己,输出填充后的房间地图 解题思路:简单的floodfill思路,利用dfs就可以做,从起点开始递归搜索,注意输入的格式 代码: #include <iostream> #include &lt...

2012-07-08 01:35:20 1151

原创 【ICPC-182】uva 657 - The die is cast

点击打开链接 题目意思:给定一个地图,然后里面分布着许多的骰子,如果骰子连在一起就是算1 ,要求给定的地图里面的骰子的点数,并且从小到大输出。 解题思路:我们知道,对于一个地图里面分布着许多的小块区域,而每一快区域里面我们要求对应骰子的点数,那么我们可以先写一个dfs函数来搜索每一个区域,然后在这个区域里面如果我们遇到'X'就在写一个Dfs用来求解骰子的点数,就是在dfs函数里面嵌...

2012-07-08 01:23:29 1489

原创 【ICPC-181】uva 705 - Slash Maze

点击打开链接 题目意思:给定一个地图,由'\'和'/'组成,要求里面能够构成的环的个数,以及最大的环的步数。 解题思路:对于这类的题目,我们可以利用小化大的思想,我们利用一个比地图大两倍的数组来存储这个地图(四格思想),对于'/',存为1 '\'存为-1,然后我们就可以像在平面上面一样直接dfs,还有对于一个环,它的各个步数肯定都是不能有和边界接触的,那么我们用一个flag来标记是...

2012-07-08 01:10:25 1009

原创 【ICPC-180】uva 439 - Knight Moves

点击打开链接 题目意思:有一个8x8的棋盘,初始给定两个位置,求出从第一个位置到第二个位置的最短路 解题思路:对于这一类的求最短路我们一般用广搜来做,开个结构体存储坐标,然后用队列存储这个这个结构体的对象,开始把第一个点放入队列,接下来进行BFS,注意这一题最大的mark标记数组开到750左右,我因为开了1010的数组TLE到蛋疼啊,不懂是不是因为数据实在很多然后每一次都调用mem...

2012-07-07 01:29:22 1310

原创 【ICPC-179】uva 572 - Oil Deposits

点击打开链接 题目意思:给你一块区域里面分布着油田,只要有连着就属于同一个油田,求出该区域有几个油田 解题思路:简单的Bfs 或 dfs 可以搞定 ,注意对走过的进行标记用mark数组。 代码: //DFS代码(用到递归) #include <iostream> #include <queue> #include <cstdio> #inc...

2012-07-07 01:13:13 1197 2

原创 【ICPC-78】uva 297 Quadtrees

点击打开链接 题目意思:给定两个字符串,字符p对应建立子树,字符e为白色,f为黑色对于不同层黑点f对应不同的值,最上面为1024下来为每个子树256.....,这样建立两颗四叉树,计算两颗树相加后的黑点f对应的值,注意在两颗树上同一点处,只要有一个为黑点,那么相加后就为黑 解题思路:1首先建立两颗树,采用递归建树的方法 2建完树后利用前序遍历的方法进行递归求解和 代码: #inc...

2012-07-07 00:49:47 1281

原创 【ICPC-77】uva 699 The Falling Leaves

点击打开链接 题目意思:给定一串数字,第一个是根节点的值,接下来如果遇到-1 则该点为空,不是-1则创建节点,求最后从左往右每一条竖线的和 分别输出。 解题思路:1 建树 2 前序遍历求和 3 输出 (这里刚误删了,晚了得睡觉了,有时间更新) 注意事项:我们可以采用,把-1 这个节点的val 赋值成很小的数,然后不让它为空,后面计算时候算到这个点直接跳过 代码: #include...

2012-07-05 01:53:48 1371

原创 【ICPC-76】uva 839 Not so Mobile

点击打开链接 题目意思:给定一序列的数字,每组四个,分别是W1 D1 W2 D2 表示左右节点的重量和长度,如果W1 或W2 为0说明有子节点存在,判断是否满足平衡 解题思路:1 建立二叉树,然后遍历查找 但是这个很麻烦 2 dfs 我们知道对于一颗树肯定是要先把左子树建完才能建右子树 我们可以用递归方式来代替建树直接求出左右两边的重量,判断是否相等 3 硬搞,这题数据很水,直接判断叶子节...

2012-07-05 01:29:48 1596

原创 【ICPC-32】uva 712 S-Trees

点击打开链接 #include <cstdlib> #include <cctype> #include <cmath> #include <cstdio> #include <cctype> #include <cstdlib> #include <cstring> #include <iost...

2012-07-03 19:30:58 1032

原创 【ICPC-75】uva 112 Tree Summing

点击打开链接 题目意思:给定一个字符串,把字符串里面的数字建成一颗树,数字有可能是负号,所以这一题其实有很多可以学的,比如怎样输入会有多行,还有怎么建立一颗树,等等。 解题思路:我们用一个字符数组来存储读入的字符串,用一个栈来存储括号,判断如果栈为空并且读到换行那么就退出。我们可以先把根节点建好,建根节点调用creatnode()函数,注意数字可能是1234 -1234这些情...

2012-07-03 12:42:51 940

原创 【ICPC-349】uva 540 Team Queue

点击打开链接 题目意思:有很多个队,然后每个队都有自己的成员,如果遇到ENQUEUE 就把该元素插入到自己队伍里面,如果没有自己的队伍那么就插入到最后面,遇到DEQUEUE就输出第一个元素,遇到STOP就停止 解题思路:首先题目的数据很大,如果我们暴力肯定会TLE ,我们用list链表,那么我们可以开一个mark[1000000]用来存储是否有这个元素,还有同一队的元素赋值为相同...

2012-07-01 21:12:18 1181

原创 【ICPC-348】uva 133 The Dole Queue

题目意思:有N份申请表围城一圈,编号为逆时针编号,有两个人一个从逆时针走k步,另一个人顺时针走m,然后就有两个人所对应的申请书的编号,如果两个人走到同一个编号那么只要删除一个就好,如果不同删除两个,知道元素为空。 解题思路:我们很容易想到用循环队列来做,但是实现起来真的有点复杂,我们可以利用数组模拟,开两个数组,分别存储编号值,再开两个数组用来表示是否该位置被删除 begin1 beg...

2012-07-01 02:00:46 978

STL_详细解释

STL_详细解释 , 有利于大家对STL的更深层次的认识

2012-08-05

uva 50个题解

有uva刘汝佳文件夹的50道题解,从数据结构开始,以后慢慢上传

2012-07-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除