自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 收藏
  • 关注

原创 例题6-17 UVa10562-Undraw the Trees

将每次的输入全部读取到二维数组中,在第一行找到根结点开始进行先序遍历即可。注意括号的输出和换行符。题目链接:UVa 10562AC代码:#include <iostream>#include <set>#include <cstring>using namespace std;//#define DEBUG//#ifdef DEBUG//#include <fstream>//#define cout out//ofstream out(

2020-05-18 17:42:15 214 1

原创 例题6-16 UVa10129-Play On Word(欧拉道路)

把每个单词的首位两个字母看做一条边的两个顶点,这样就可以把图建起来了。之后先深搜看看这个图是不是连通图,不是的话不存在欧拉道路。之后判断每个顶点的出度入度是否相同,如果不相同的点超过两个,也不存在欧拉道路。如果所有点的出度入度都相同,或者不相同的两个点恰好可以作为起点和终点,则存在欧拉道路。我是用邻接表实现的。题目链接:UVa 10129AC代码:#include <iostream>#include <list>#include <set>using nam

2020-05-18 15:45:46 194

原创 例题 6-15 UVa10305-Ordering Tasks(拓扑序列)

第一次接触到的拓扑序列的题。尝试了邻接表和邻接矩阵+深搜两种写法,后者是紫书的方法。邻接表的方法是考察每个点的入度,邻接矩阵的方法是通过深搜找到每条路径的终点,将它比喻为结果的话,它的父结点就是它的依附条件,同理推下去,每次深搜得到的点都应该放在当前拓扑序列的队首。题目链接:UVa 10305AC代码:邻接表解法:#include <iostream>#include <list>#include <queue>using namespace std;c

2020-05-18 00:24:03 192

原创 例题6-14 UVa816-Abbott的复仇(BFS)

BFS的题目,值得学习的地方是灵活地使用数组来表示结点的各种状态,以及将定长的字符串转换成对应的数字以方便使用。先记录一点。题目链接:UVa 816AC代码:#include <iostream>#include <cstring>#include <queue>using namespace std;const char* dirs = "NESW";const char* turns

2020-05-17 22:17:26 287

原创 例题6-13 UVa1103-Ancient Messages(DFS)

算是很复杂的题了(起码对我来说)。彻底弄懂之后梳理一下解法步骤吧:把十六进制的输入转成二进制保存。在保存的图像外圈新增一个白圈。这样做是为了把符号处在图像边缘时切割开的白色部分全部连在一起,以便于之后着色。实际操作时我是在存放的时候就留出了左侧和上方的空间,然后在深搜的时候把四个方向的空行全部加上,间接加了白圈。外层的白色全部着色后,剩余的白色就只剩下符号内部的白洞了。这时对每个符号分别进行深搜,把黑色块换成新的颜色,遇到白色块时把与这个白色块连通的白色块全部着成同种颜色,同时计数器加一,表示有一个

2020-05-17 16:13:09 152

原创 例题6-12 UVa572-Oil Deposits(二重循环确定八个方向)

这道题值得记录的点是使用二重循环确定八个方向,通过和-1,0,1的配合实现从一个点向八个方向辐射,很聪明的做法。题目链接:UVa 572AC代码:#include <iostream>#include <cstring>//#include <fstream>using namespace std;const int maxn = 1000;int m,n,flag[maxn][maxn];//标记当前点是否被访问过char vex[maxn][max

2020-05-16 16:43:56 167

原创 例题6-11 UVa297-Quadtrees(不同于紫书的解法,基于指针的树实现)

第一次遇到四叉树的题目。紫书上相当于创建了32×32的二维数组来模拟整个大方块。而我的思路是:仿照建二叉树的方法建四叉树,只是多了两个子节点而已。分别用-1,0,1来表示当前节点的颜色,以便于合并以及计数。合并的细节我写到了注释里。计数时,将根结点(即最外层的大方块)看做拥有32×32=1024个像素点,那么第二层中,每个结点拥有1024/(2^2)个结点,以此类推。题目链接:[UVa 297](https://onlinejudge.org/index.php?option=com_onlinejud

2020-05-15 15:35:08 240

原创 例题6-10 UVa699-The Falling Leaves(指针建树版)

这道题就比较简单了,借助足够大的数组保存每个位置的值得总和就好。其实做完之后感觉建树反而显得冗余,因为我的代码是边读入边判断的,树结构其实没有实际的用处,只是在计算总和时顺便建好的,所以不建树可能是更好的方法(参照紫书)。当然如果是建好树后再遍历求结果的话树结构是有用的,但是很显然会复杂很多。题目链接:UVa 699AC代码:#include <iostream>#include <cstring>//#include <fstream>using names

2020-05-15 11:03:22 139

原创 例题6-9 UVa839-Not so Mobile

依然还是尝试使用基于指针的树来解决,本来已经过了uDebug,但还是遇到了无限RE。第一次RE后,换到Dev c++进行调试,发现是旧标准下内存申请的问题(具体原因我也讲不清),缝缝补补终于调到Dev c++也没问题后继续submit,但还是RE。最终也没找到问题。但还是记录下代码。题目链接:UVa 839修改得面目全非的RE代码:#include <iostream>//#include <fstream>using namespace std;struct Node

2020-05-15 00:11:33 122

原创 例题6-8 UVa548-Tree(DFS,使用基于指针的树实现)

树的深度优先遍历,紫书上给出的是数组的实现方式。我又写了一遍基于指针的树,思路借鉴了紫书,权当练习了。题目链接:UVa 548AC代码:#include <iostream>#include <sstream>#include <vector>//#include <fstream>using namespace std;vector<int> in_order, post_order;int best, best_sum;

2020-05-14 21:41:12 138

原创 例题6-7 Uva122-Trees on the level(BFS)

树的广度优先遍历,很基础的题目。要注意的是如何从输入流中获取需要的数据。题目链接:UVa 122AC代码:#include <iostream>#include <fstream>#include <cstring> #include <vector>#include <queue>using namespace std;const int maxn = 1000;struct Node { bool have_value;

2020-05-14 21:36:28 121

原创 例题6-6 UVa679-Dropping Balls(满二叉树、递归)

这题解法同样很多,紫书上直接模拟最后一颗小球的做法很妙,在此就不再赘述。想记录的方法是递归解法。列出前四层每个小球的落点,以第2和第3层为例:第二层是2,3;第三层是4,6,5,7;不难注意到,4,6分别是22与32,而5,7分别是22+1与32+1;在其他层里也可以找到这样的规律,所以可以使用以下的递归解法。题目链接:UVa 679AC代码:#include <iostream>#include <cmath>using namespace std;int tree

2020-05-14 00:14:57 164

原创 例题6-5 UVa12657-Boxes in a Line(不同于紫书的解法)

这道题很明显是双向链表了,因为要知道上一个盒子的位置。所以可以使用list库。但仅仅如此的话定位某个data还是需要从头查找,很浪费时间,而我也确实因此TLE了。后来看到别人使用vector保存对应data的指针,这样可以直接读取。但使用后还是TLE。怀疑是使用reverse翻转时浪费了时间。最终借用了紫书的inv标记,终于AC。题目链接:UVa 12657AC代码:#include <iostream>//#include <fstream>#include <ve

2020-05-13 23:11:10 176

原创 例题6-4 UVa11988-Broken Keyboard (a.k.a. Beiju Text)(用不同于紫书的两种办法解决!)

这道题目紫书上给出的解法是使用数组模拟链表,个人认为不大好理解。所以尝试了新的办法:栈+双向队列以及双向链表。具体的细节都在注释里给出。其实还想用单向链表实现一下,等明天有时间再写吧。题目链接:UVa 11988AC代码①:双向链表#include <iostream>#include <list>using namespace std;int main() { string s; while (cin >> s) { list<char&gt

2020-05-12 23:22:51 220

原创 例题6-3 UVa442-Matrix Chain Multiplication

这道题让我想起去年学数据结构时候做过的实验题:虽然说难度不同,要实现的目的也不同,但是思路上是完全一致的:把要参与运算的元素和符号分离开来,当触发某一条件时进行运算并对栈进行处理。这道题除了"(“和”)"外没有其他的运算符,所以只创建一个栈。题目链接:UVa 442AC代码:#include <iostream>#include <stack>#include <map>//#include <fstream>using namespace

2020-05-11 19:12:07 185

原创 例题6-2 UVa514-Rails

很简单的模拟题,也是学到栈时很经典的填空题。按照做题时的思路一步步写下来就好了。在uDebug时发现最后还要多输出一个空行,算是易错点吧。题目链接:UVa 514AC代码:#include <iostream>//#include <fstream>#include <stack>using namespace std;const int maxn = 2000;int main() { int T, N, count = 0; //ofstream

2020-05-11 17:47:03 143

原创 习题5-15 UVa12333-Revenge of Fibonacci(TLE)(需字典树知识)

每次碰到斐波那契数列的题必有一次TLE…修改了几版之后仍然是TLE,除了输出-1的情况外几乎都很快了。之后参考了别人的代码,就是这一篇:ACM手记。虽然看懂了做法,但是可能有些细节没顾及到,所以还是WA了。最后就算这道题TLE吧,因为更多人的做法是我还没接触的字典树,等学到了再回头来做。题目链接:UVa 12333最终版的TLE代码:#include <iostream>#include <algorithm>#include <string>#include

2020-05-09 23:31:13 142

原创 习题5-12 UVa511-Do You Know the Way to San Jose?

这道题对于英语不太行全靠机翻读题的我简直是灾难,读了三遍题以后对细节还是不太理解。开始写之后发现很多地方的处理都不是很完善,尤其是使用sort进行排序时,自定义的cmp无法引入另外的参数(我起初不会),也就没办法比较点到地图中心的距离对地图进行排序了。之后查看了即为前辈的代码,找到了解决办法:bind函数。

2020-05-09 17:06:12 284 2

原创 习题5-11 UVa12504-Updating a Dictionary

本题只需要用map创建新旧字典,用set保存新增、删除和修改的元素后输出就好了。易错点是需要在每一个测试用例之后输出一个空行。比较疑惑的地方是在创建map时,如果采用substr截取key和value就会报WA,采用符号换空格再用字符串流输入的话就会AC,看了半天没弄清楚原因。。。题目链接:AC代码:#include <iostream>#include <sstrea...

2020-05-08 15:15:33 139

原创 习题5-10 UVa1597-Searching the Web

本题确实很锻炼编码能力。最最最重要的是选择合适的容器来存放数据。我第一次做采用了三维数组存放后遍历查询,但是由于太麻烦甚至没能完成就放弃这个方案了;第二次采用二维向量存放每一行,在查询时再分别对各行进行处理,最后虽然完成了但是不出所料:TLE。一筹莫展之际翻了翻讨论区,看到有大佬说“这道题不是暴搜就行?”我直接傻掉,赶紧点进他的主页看了他的代码,噢,原来这就是大佬的暴搜…(在代码里用到了,我的注释...

2020-05-07 23:08:06 231 2

原创 POJ 1207-The 3n + 1 problem

做个水题放松一下(#^ . ^#)水是真的水,坑也是真的多,要注意输入的i可能会大于j,如果交换后还是要按照输入顺序来输出!题目链接:POJ 1207AC代码:#include <iostream>using namespace std;int main() { int a, b; while (cin >> a >> b) { cout ...

2020-05-06 19:18:56 141

原创 习题5-9 UVa1596-Bug Hunt

本题算是不难但是很绕的题了。首先要想清楚用什么来存放读入的数据,其次数组的名与值要怎么分离开来,然后如何判断有没有bug,是左值与右值分开判断?还是将判断写到一个函数里?d最后,读入的数组应该存储起来,以便应对数组嵌套。其余的代码里注释得很详细了。这次学到了isdigit(int c)函数,它用来判断参数是否为阿拉伯数字0~9,若是返回true,否则返回false。还有使用pair类模板来创建对...

2020-05-06 16:31:16 329

原创 习题5-8 UVa230-Borrowers

本题可以直接采用模拟的方法,不过要注意输出的规则和格式。**输入SHELVE后输出的顺序也是按照先作者后书名的方式。**其余想记录的地方就是采用substr截取所需数据,很实用。题目链接:UVa 230AC代码:#include <iostream>#include <sstream>#include <algorithm>#include <...

2020-05-05 23:45:41 116

原创 习题5-7 UVa12100-Printer Queue

利用一个排序过的数组存放所有的优先级,同时用来判断当前的队首元素是不是队列中的最大值。再用一个队列模拟整个过程就OK了。题目链接:UVa 12100AC代码:#include <iostream>#include <queue>#include <algorithm>using namespace std;const int maxn = 100...

2020-05-05 16:46:23 168

原创 习题5-6 UVa1595-Symmetry

本题的难点是如何判断几个点组成的图形是否对称,只要能发现所有点的横坐标的和求平均数得到的横坐标恰好是对称轴所在的位置就好了。求出对称轴后再把各点到对称轴的距离求出来排序,这个问题就解决了。要注意对称轴和点到对称轴的距离可能不是整数。题目链接:UVa 1595AC代码:#include <iostream>#include <algorithm>using name...

2020-05-05 14:42:23 139

原创 习题5-5 UVa10391-Compound Words

这道题第一眼的思路是将所有单词在输入时就两两配对存入新的数组中,输入完毕后遍历单词数组和复和单词数组,将复合数组中与单词数组相同的部分输出。但是这种方法会超时。所以采用拆分所有单词的方法,看了代码就明白了。题目链接:UVa 10391AC代码:#include <iostream>#include <string>#include <set>usin...

2020-05-05 12:27:15 158

原创 习题5-4 UVa10763-Foreign Exchange(map)

这道题很自然地会想到用map来解决,将学生的意愿a,b组成的对作为Key,统计相同的对出现的次数作为Value,最后判断每个映射的Value是否全为0即可。这道题让我迷惑的地方在于,我想如果学生人数n为奇数的话匹配一定不成功,但是只要加入这个判定就会报WA…晕了我还尝试过将学生的意愿a,b分别作为Key和Value,但是会报TLE,怀疑是数据变多以后循环时间过长的原因。题目链接:UVa 10...

2020-05-05 11:31:58 130

原创 习题5-3 UVa10935-Throwing cards away I(queue)

这道题我采用的是两个队列的方法来解决的。需要注意的地方就是输出的格式了。题目链接:UVa 10935AC代码:#include <iostream>#include <queue>using namespace std;queue<int> discard, remain;int main() { int n; while (cin &gt...

2020-05-05 11:12:39 134

原创 习题5-2 UVa1594-Ducci Sequence

这道题真的蛮水的,直接放代码了。题目链接:UVa 1594AC代码:#include <iostream>#include <cstring>#include <cmath> using namespace std;const int maxn = 2000;int num[maxn], n, num_c[maxn];bool is_loo...

2020-05-05 11:09:44 154

原创 习题5-1 UVa1593-Alignment of Code(字符串流)

刚看到这道题的时候,我的思路是分行逐个字符读入进行判断。但是这样写完之后发现没有退出循环的条件。之后换了方法,采用字符串流输入,成功解决。题目链接:UVa 1593AC代码:#include <iostream>#include <sstream>using namespace std;const int maxn = 2000;int num[maxn],...

2020-05-05 11:06:51 124

原创 例题5-12 UVa221-Urban Elevations

紫书的分析中已经说得很清楚了,只需要理解x数组中存放的是什么、排序后和去重后存放的顺序有什么意义,读懂书上的代码就很简单了。x数组中存放着每个建筑物的两个底角的横坐标,经过排序和去重后,相邻两个元素组成的的区域加起来便可覆盖整个x轴。题目链接:UVa221代码:#include <iostream>#include <algorithm>using namesp...

2020-05-03 15:53:02 127

原创 例题5-10 UVa207-PGA Tour Prize Money(WA)

这道题真的是搞心态的神仙题了,由于到最后还是晕晕乎乎+WA,所以就不多说了,直接贴代码。题目链接:UVa 207WA代码:#include <iostream>#include <algorithm>#include <cstring>using namespace std;#define DQ 99999#define eps 1e-8st...

2020-05-02 11:32:43 274

原创 例题5-9:UVa1592-DataBase

我感觉本题对于初学者来说难度还是不小的,并且需要注意的地方也有很多。首先,虽然例题分析中已经给出了思路,但思路仅仅是思路,实现起来还会遇到不少阻碍。像我碰到的由于数组开太小不停报RE啦、二维向量没有正确初始化导致无穷无尽的WA啦等等。接下来就记录一下在本题中曾经遇到的问题。按照代码顺序由上往下记录。题目链接:UVa 1592在map中用到自定义的结构体需要重载<运算符。第一次遇到这...

2020-05-01 11:13:25 199

原创 紫书知识点记录(持续更新)

开一篇帖子记录一下看书时觉得重要的知识点吧,想起来的话就加进来,总比没有强…“一等公民”指既可以作为参数传递,又可以从子程序中返回,还可以直接赋给它变量的类型,“二等公民”指尽可以作为参数传递的类型,“三等公民”指三者都做不到的类型。getchar()可用来读取包含空格、换行符的字符串。乘以2也可以写成“<<1”,意思是左移一位。(感觉有点复杂,还没掌握)回车换行符:Linu...

2020-04-26 18:14:09 145

原创 习题4-3 UVa220-Othello(WA)

每次做这种题都是些一堆代码,然后调试提交,最后报WA。和网上的解法一对照就会发现自己的代码过于冗长。暂时没有耐心进行修改了。就记录一下吧。题目链接:UVa 220WA代码:#include <iostream>#include <cstring>char board[10][10];int is_legal[10][10];int is_change[10][...

2020-04-05 13:32:23 176

原创 习题4-2 UVa201- Squares

一开始确实没思路,如何存点和线段的问题困扰了很久,知道在网上看了前辈们的解法才开始用两个数组分别存横线和竖线。之后只要按照边数数正方形就好了。易错点是输出格式,要注意空行的输出。题目链接:UVa 201AC代码:#include <iostream>#include <cstring> using namespace std;int H[10][10], V[1...

2020-04-01 20:32:45 119

原创 习题4-4 UVa253-Cube painting

我的思路大致分为两步:判断输入的两段字符串是否可以经过排列后完全相同。判断两个骰子相对的面的组合是否完全相同。同时满足以上两个条件的两个骰子即为等价。在进行第2个条件的判断时,由于骰子的各个面的数字已经给出,那么有1-6,2-5,3-4三种组合,所以后只判断两个字符串的前三个字符的组合就行了。题目链接:UVa 253AC代码:#include <iostream>#i...

2020-03-31 23:22:53 146

原创 习题4-1 UVa1589-Xiangqi(WA )

我的思路是,使用两个二维数组chess和check分别记录棋盘上棋子的位置和红棋的攻击范围,再判断黑方将棋的活动区域是否可以被攻击到,如果全都会被攻击,则将死。记录一下过程中犯的错误:如果起始状态黑红将棋在同一条线上并且中间没有其他棋子,这种情况是没有将死的,因为黑方将棋可以“flying general”,直接吃掉红方帥棋。車、炮、帥的攻击范围的判断有相似的地方。以車为例,它的攻击范围是...

2020-03-26 20:14:14 230

原创 例题4-1 UVa1339-Ancient Cipher

本题是一道例题,但是可能是由于书上没给出实现代码,所以开始的时候并没有理解到题目的意思。题目的要求不是按照每个字母向前一个映射的方法解码!而是每一种密码都可以随意映射,只要有一种符合给出的猜测就好。这样理解的话书上的分析就全部说得通了。题目链接:UVa 1339AC代码:#include <iostream>#include <string>#include &l...

2020-03-23 12:13:09 187

原创 习题3-11 UVa1588-Kickdown

本题的关键是将两个长条的嵌合想象成动态的过程:两长条嵌合只有两种情况,长条s向左移动嵌入长条t或者长条t向左移动嵌入长条s。题目链接:UVa 1588AC代码:#include <iostream>#include <string>using namespace std;int min(int a, int b) { if (a > b) retur...

2020-03-22 15:43:28 144

空空如也

空空如也

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

TA关注的人

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