自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Yonah潇的专栏

悲观的头脑。乐观的意志,

  • 博客(37)
  • 收藏
  • 关注

原创 UVa 657 - The die is cast解题报告

题意:其中X和*一起称为区域I,在区域I中相连的X称为区域II , 输出就是输出m个数字,其中m就是区域I的个数,这m个数字中第i个数字num[i]表示某块区域I一面又多少个区域II。这道题就是简单图的搜索的加强版,因为需要先搜索确定区域|,再在区域|中搜索X区域。也就是双重搜索。思路:先深搜*或X,然后判断X,如果是X再调用另一个搜索函数搜索X的区域,并把搜过的地方标为*。每次调用dfs1搜

2014-02-27 13:29:44 612

原创 ubuntu 13.10以及12.04笔记本关闭独显的方法

最近在折腾linux系统,由于是新手,所以选择了ubuntu来学习使用。对于笔记本上运行linux的,由于不支持双显卡,一般都是独立显卡光耗电,不干活,因为在linux上很少情况用的到独显。于是关掉独显就比较省电,降低笔记本的温度。一开始用的是别人说的方法——安装bumblebee,但是由于我用的是最新的13.10,而他提供的软件版本是12.04的,所以不好用。这说明提供方法时最好说明系统版本

2014-02-21 21:07:03 1279

原创 UVa 572 - Oil Deposits解题报告(图的DFS和BFS)

题意:找出相连在一起的有多少块思路:直接搜索,遇到@相连的就标记。DFS:深度优先搜索,对一个点搜索八个方向,把符合要求的点放入栈,搜完一个点后,再从栈顶弹出一个点进行同样的操作,直到栈空。入完再出。BFS:广度优先搜索,对一个点搜索八个方向,把符合要求的点放入队列,搜完一个点后,再从队首弹出一个点进行同样的操作,直到队列空。同样是入完再出。以下用DFS和BFS分别实现:(有趣的是

2014-02-19 11:42:34 714

原创 UVa 10562 - Undraw the Trees解题报告

题意:根据图形化的树,输出前序遍历的节点。思路:一开始我用边读边建的方法遍历,后来发现由于输入的两棵子树数据都在同一行,行不通。这道题的关键就在于处理"--------"区间决定的子树。在网上看了一下,有人想到了根据‘————“区间进行扫描,因为每一层的节点都有上面一层的”——",根节点没有,但是我们可以自己构造。这一点很巧妙,我没有想到。于是,根据上面的方法,我们用二维数组来存储整个

2014-02-18 16:08:16 712

原创 UVa 839 - Not so Mobile解题报告

题意:求一棵二叉树是否平衡。平衡的定义是每个树的w1*d1 == w2*d2,如果有子树,那么它的w为子树的w1+w2。思路:直接递归模拟建树过程求解。#include using namespace std;int DFS();int flag;int main(){ int cases; scanf("%d", &cases); while (cases--) {

2014-02-17 23:12:25 636

原创 UVa 327 - Evaluating Simple C Expressions解题报告

题意:模拟计算--,++的计算式思路:利用stl可以很简单的实现,代码也很清晰明了。首先是利用string类输入数据并清除空格,然后对式子进行扫描,以三个位单位,发现符合x++,x--,--x,++x的情况就对值进行改变,并替换。而对于字母与数字的关系,利用map映照容器建立映射,由于前置和后置对于计算是有不同影响的。使用value存储字母的最终值,用copyvalue存储计算时的字母值,分开

2014-02-17 18:34:31 767

原创 UVa 699 The Falling Leaves解题报告

题意:求二叉树垂直方向节点的和。思路:由于题目给出的数据是前序遍历的,最直接的方法是建树模拟。最简单的方法是用数组模拟求和。我用的是数组模拟,以根节点为中心,遇到左树-1,遇到右树+1,向两边扩展,利用建树的递归思想。#include #include using namespace std;int ans[100];void build(int, int);int main(

2014-02-17 11:02:47 1207

原创 UVa 712 - S-Trees解题报告

一道简单二叉树问题,但是要读懂题目意思不容易。题意:给你一棵二叉树,还有一个序列,如001,对于深度为3的树,第一个0表示在根节点处向左孩子,第二个0表示在第二层处向左孩子,1表示在第三层向右孩子。输出到达叶子节点的值。这道题跟一道小球下落的题目是一样的。思路:根据给出的n建立二叉树,模拟即可。其中对于节点的方向可以利用map建立映射。另一个思路是用数组模拟,事实上这个过程跟二分很像。

2014-02-16 16:32:53 837

原创 UVa 297 - Quadtrees解题报告

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

2014-02-16 12:32:54 709

原创 UVa 548 - Tree 二叉树的重建与遍历

题意:给你中序和后序的遍历顺序,建树算路径和,输出最小路径和的叶子值。思路:进行了二叉树重建之后,只要对这棵二叉树进行搜索, 取得各个路径之和,然后找出最小的那个和即可。关键就是利用遍历顺序重建二叉树,这一点我参考了D_Double的报告UVa 548 - Tree 二叉树的重建——中序遍历与后续遍历进行建树。由中序遍历 分别和前序遍历,后序遍历进行建树的方法://

2014-02-15 12:05:40 600

原创 UVa 112 - Tree Summing解题报告

题意:题目要求很简单,意思是要构造一颗二叉树,然后求出所有根结点到叶结点的路径上的数字之和,如果有一个是和题目所给的一样,那么输出yes,否则no左括号‘(' 表示新建一个子结点, 优先建立左儿子,如果左儿子建立过了,则建立右儿子。 右括号表示退回父结点。如果一对括号内是空的,表示这个结点也是空的。思路:输入比较复杂, 有括号,有数字,又

2014-02-14 21:03:51 810

原创 UVa 10050 - Hartals解题报告

题意:一共n天,给出a1,a2...在它们的倍数日罢工,但是周六周日不罢工,输出n天中罢工的天数思路:用数组模拟。//10050 - Hartals#include #include using namespace std;bool unwork[3700];int main(){ //freopen("data.txt", "r", stdin); int cases;

2014-02-14 13:19:46 804

原创 UVa 540 Team Queue解题报告

题意:有n只team,每只team有一些元素。然后这些元素按照队列的规律排队,如果一个元素在队伍中能够找到属于相同team的元素,则排在这些属于相同team的元素的最后方,否则作为队伍的第一个元素排在队列的最后。值得注意的是,题目输入数据都是在队伍列表中。思路:对于如此大规模的数据量,在队列中搜索队友是很耗时的。最好的办法是用映射,鉴于本题数据是数字,所以可以用一个数组建立映射,下标为元素的数

2014-02-13 21:10:09 639

原创 UVa 11234 Expressions解题报告

一道二叉树问题,套着栈和队列的外衣。说到底是利用计算表达式是利用二叉树来模拟的。如果不知道这一点,估计很难想出来。思路:栈实现的是树的后序遍历,可以根据栈的特点建树,即遇到小写字母入栈,遇到大写字母出栈,连接树的节点后再入栈。然后模拟队列实现宽度优先遍历。具体见代码。//11234 Expressions#include #include #include using namesp

2014-02-13 12:07:46 589

原创 UVa 11111 - Generalized Matrioshkas解题报告

一道题意很难读懂的题目,实际上是括号匹配的加强版。新增的要求是内括号的值小于外括号的值。如果一个大括号包涵几个内括号,且内括号的总和不超过大括号的值。满足条件为真,反之为假。题目很抽象,把数组当成括号可以容易理解一些。思路:用结构体表示值和空间,大括号内的小括号会占用空间,当空间小于0时说明不满足条件。这一点我想了很久,参考了别人的思路。这个条件有点难想到,最好是手动模拟一下。//1111

2014-02-12 19:33:31 647

原创 UVa 442 - Matrix Chain Multiplication解题报告

利用栈模拟乘法括号运算。利用map建立键值映射可以很快的做出来。一次ac。思路:用结构存储矩阵的row,col。然后用map把矩阵代号作为键值映射到结构上。遇到不是“)”的都压栈,遇到“)”就出栈计算,再建立新的映射存储新的矩阵压栈。ps:@表示出错的地方//442 - Matrix Chain Multiplication#include #include #include

2014-02-12 14:47:54 706

原创 UVa 673 - Parentheses Balance解题报告

栈的经典运用,括号匹配。思路:收到“(" "["时入栈,收到”)" "]",出栈,最后判断栈是否为空//673 - Parentheses Balance#include #include #include using namespace std;char str[130];int main(){ //freopen("data.txt", "r", stdin

2014-02-11 20:48:15 701

原创 UVa 10152 ShellSort解题报告

题意:有一堆的乌龟,输出一堆乱序的乌龟,然后输入一个正确的顺序,要求找到一种最小步骤的方法使得第一堆变成第二堆,每一次可以把乌龟移到第一个位置,输出该方法步骤。思路:从后往前遍历第二个乌龟数组,与第一个乌龟数组比较。每个乌龟都有一个从小到大的编号,由第二个乌龟数组决定。于是变成了两个数字数组的顺序比较。将字符串比较抽象为数字顺序的比较。112433455

2014-02-11 17:20:02 658

原创 UVa 133 The Dole Queue解题报告

模拟队列问题,我用的是双向循环链表来模拟。 注释@的地方是我出错的地方。//133 The Dole Queue#include using namespace std;struct nobe{ int value; nobe * pre, * next;};nobe *head, *last;//记录逆时针和顺时针的起点void creat_list(int)

2014-02-11 13:19:04 630

原创 UVa 101 - The Blocks Problem解题报告

模拟类型的题,很麻烦。特别考验细心程度。虽然调试了很久,但是倒也学会了不少的调试技巧。注意:无需考虑将积木放回原位时原位被占的情况,因为没有任何一个操作可以把积木放在空的位置上,因此也不可能出现在第i个位置上,第i个积木的下面有其它积木的情况。思路:用一个二维数组模拟积木堆,用结构数组pos存储每个积木的x,y坐标,每个积木的代号正好与结构数组的下标形成一一映射。再用len数组存储存储每个

2014-02-10 20:40:42 784

原创 UVa 127 "Accordian" Patience解题报告

一道链表模拟题,可以用数组做,也可以用链表来模拟过程。用链表模拟比较麻烦,一不小心就被指针搞晕了。但是我想趁机熟悉一下链表的实现,所以用的是链表来做这道题。其实链表没有想象中可怕,就是要对指针很小心,不然很容易出现环。思路:从左到右,对每张牌堆的最上面一张牌,向其左边的第三和第一张牌做比较。优先移动到第三张牌上面。每次移动都要重新从第一张牌开始比较,直到所有牌都无法匹配。#includ

2014-02-10 10:10:08 586

转载 Python中字符串的总结

在学习python的字符串时有点困惑,查了一下,发现一篇总结的很好的文章。可能大多数人在学习C语言的时候,最先接触的数据类型就是字符串,因为大多教程都是以"Hello world"这个程序作为入门程序,这个程序中要打印的"Hello world"就是字符串。如果你做过自然语言处理方面的研究,并且用Python去做过相关实验,你肯定会体会到Python在字符串处理方面相对于其他语言的明显优势

2014-02-07 20:59:05 1273

转载 c++标准库简介

C++标准库的所有头文件都没有扩展名。C++标准库的内容总共在50个标准头文件中定义,其中18个提供了C库的功能。 形式的标准头文件【 例外】其内容与ISO标准C包含的name.h头文件相同,但容纳了C++扩展的功能。在 形式标准的头文件中,与宏相关的名称在全局作用域中定义,其他名称在std命名空间中声明。在C++中还可以使用name.h形式的标准C库头文件名。 C++标准库的内容分为10

2014-02-06 20:56:21 437

原创 UVa 10785 - The Mad Numerologist解题报告

之前用的比较多的是c的函数,最近发现c++的STL很强大,做题起来方便很多,用c的数组经常很越界,而且操作很繁琐。为了解题的方便,以后要多用STL了。可以在数据的录入和处理上省下不少时间。#include #include #include using namespace std;const char vowels[] = "AUEOI";const char conson

2014-02-06 17:15:40 589

原创 UVa 755 487--3279解题报告

第一道超时题目,数据量太大达到100000,。如果要一个一个手动模拟比较,肯定会超时。看了别人的代码,都是用到了stl的map容器。果然是神器,如果不用map还真不知道怎么在3秒内输出结果。用了map是1秒多。代码很清晰,就没写注释。#include#include#include#include#include#includeusing namespace std;c

2014-02-06 13:27:56 560

转载 标准C++中的string类的用法总结

标准C++中的string类的用法总结要想使用标准C++中string类,必须要包含#include // 注意是,不是,带.h的是C语言中的头文件using  std::string;using  std::wstring;或using namespace std;下面你就可以使用string/wstring了,它们两分别对应着char和wchar_t

2014-02-06 11:37:24 446

原创 UVa 10194 - Football (aka Soccer)解题报告

读入各个球队的名字, 和球队之间比赛的进球数, 要求统计各个球队的比赛总场数, 总得分等信息, 按以下优先级顺序进行输出:1. 最高得分2. 最多胜利场次3. 最多净胜球数(进球-失球)4. 最多进球数5. 最少比赛场数6. 球队名字典序, 小的排前面(比较时不区分大小写)   #include #include #include #include #inclu

2014-02-05 21:10:33 557

原创 UVa 400 - Unix ls解题报告

一道简单的字符串排序问题,只是输出格式要注意。找到规律就不难了。//400 - Unix ls#include #include #include using namespace std;int cmp_words(const void *_a, const void *_b){ char *a = (char*)_a; char *b = (char*)_b; re

2014-02-05 11:06:30 698

原创 UVa 123 - Searching Quickly解题报告

题意:给出一系列要忽略的单词,这些单词以外的单词都看作关键字。然后给出一些标题,找出标题中所有的关键字,然后按这些关键字的字典序给标题排序。思路:用结构数组存储关键字和它在title中位置,最后按位置来将它大写。做这道题时,因为数组开小了一直wrong,一直以为数组开小只会runtime error,没想到居然不会越界,于是一直没有去考虑数组开小了的问题。纠结了四个小时。才发现这个问题。很

2014-02-04 19:37:31 571

原创 UVa 156 - Ananagrams解题报告

字母重排问题关键是对数据的录入,预处理,以及利用qsort进行排序。#include #include #include #include using namespace std;char word[1010][30], cword[1010][30], sword[1010][30];int flags[1010];//标记数组int cmp_word(const voi

2014-02-03 22:43:35 755

原创 UVa 120 - Stacks of Flapjacks解题报告

模拟排序题,思路:从右到左扫描数组,把未排序的区间的最大数的位置j找到,然后将0到j的区间反转,再将这个最大数应在的位置i到0的区间反转一次,就完成了一次排序,重复进行,直到扫描到数组的最左边。需要注意边界条件的处理。//120 - Stacks of Flapjacks#include #include using namespace std;int pan[40];

2014-02-03 19:06:06 622

原创 UVA 299 - Train Swapping解题报告

一道冒泡排序的变形。//299 - Train Swapping#include #include using namespace std;int train[60];int bubble(int *, int);int main(){ freopen("data.txt", "r", stdin); int cases; scanf("%d", &cases); whi

2014-02-03 14:33:51 571

原创 UVa 152 - Tree's a Crowd解题报告

题意:每一颗树都与其他的树计算距离, 取最近距离(下取整). 如果最近距离在 [0,9] 之间, 就记录下来. 最后输出各个最近距离的个数。也就是说要每个点与其他点都比较一次,求最小距离。#include #include #include #include using namespace std;struct dots{ double x, y, z;};d

2014-02-03 10:28:00 605

原创 UVa 10474 - Where is the Marble?解题报告

读入一行2个数字 N 和 Q, N 表示接下来的 N 行数字为 marbles, Q 表示 N 行数字之后的 Q 行数字为 query. 要求把 N 行 marbles 从小到大排序, 然后输出每个 Q 在 marbles 中的位置.注意是第一次出现的位置。思路:用快速排序对其进行排序,然后用二分查找查找其第一次出现的位置。可以用其他的排序和搜索算法。如qsort。#include

2014-02-02 22:28:45 551

转载 二分查找总结

本文转自二分查找二分搜索算法是运用分治法的经典例子,给定已排好序的n个元素,现在要在这n个元素中找到一个特定的元素,注意使用二分查找的时候要知道已排序的n个元素是升序还是降序还有你使用的数据类型(字符串类型的比较要注意),1. 最基础的二分查找下面的的例子为升序情况的二分查找的情况。示例:如有已排序数组有8个元素如下查找元素x = 5;1  

2014-02-02 21:29:10 589

原创 UVa 10420 - List of Conquests解题报告

字符串的提取,排序,合并。排序操作可以用很多种排序算法,我用的是刘汝佳推荐的qsort函数。#include #include #include using namespace std;struct ans{ int x, y;};char country[2100][80], str[80];ans num[2100];//用一个结构数组,x存储国家在country数组

2014-02-02 16:28:06 625

原创 UVa-340 - Master-Mind Hints解题报告

一道猜数字游戏,由于游戏的输出规则有点难理解,让整道题看起来很难懂。于是去网上查了一下题意。题意:如果给出的数字和猜测的数字一样,并且在同一列上(即:i==j)那么就是括号左边的数字加1.即a=a+1.如果位置不一样,数字一样,测b=b+1;思路:利用两个判定数组标记数字是否被匹配过。也可以将匹配过的数字标记为0.#include #include usin

2014-02-02 11:53:48 784

空空如也

空空如也

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

TA关注的人

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