PAT
景天的天
我害怕你心碎没人帮你擦眼泪
展开
-
PAT 1034.Head of a Gang
这道题目一开始的看了《算法笔记》上面的代码,很诧异为啥用dfs去遍历一个cluster,并且还做了删除上一条边的操作。自己写了代码以后就想清楚了。因为这不是一个简单的遍历操作,你不能把访问过的节点标记了就不访问了。图里面会有环,可能两个访问过的节点中间也会有边,所以需要下面不同于寻常的bfs,加入了下面这段代码:for(int i=1;i<=numperson;i++) {...原创 2018-09-21 21:19:25 · 201 阅读 · 0 评论 -
PAT 1090 Highest Price in Supply Chain
基础题。递归需要注意两点千万别忘了。不然在写递归代码的时候就会特别没有章法。很乱。递归边界。即递归的重点。递归式。即递推式。 #include <cstdio>#include <queue>#include <algorithm>using namespace std;const int maxn = 100011;struct no...原创 2018-08-03 20:30:10 · 129 阅读 · 0 评论 -
PAT 1093.Count Pat's
一开始想着的事记录p的位置a的位置t的位置,然后再去找每个p后面有多少个a,以及这个a后面有多少个t。 后来看了人家的解法,发现其实可以统计每个a前面有多少个p,以及后面有多少个t。然后把结果乘起来,然后再加起来就可以了。 两次遍历构建,一次遍历计算结果。 完美。好好学,好好看。#include <iostream>#include <stdio.h>#i...原创 2018-07-24 18:16:04 · 155 阅读 · 0 评论 -
PAT 1029. Median
回家提交一下#include <iostream>#include <stdio.h>#include <cstring>#include <cstdio>#include <map>#include <math.h>#include <string.h>#include <al原创 2018-07-24 17:26:25 · 198 阅读 · 0 评论 -
PAT 1089. Insert or Merge
挺不错的题目。输入两个数列a和b,叫你判断从a到b是经过了插入排序呢,还是归并排序。 其实插入排序是很好判断的,只要找到前n个有序数,然后判断后面的数是不是一动不动就可以了。为了达到熟悉插入排序的目的 归并的话就是只能是一步步递归下来如果中间有和目标数组一样的话就跳出来。 其实题目中说的是答案是唯一的,但是牛客网的案例会有就是插入排序的到了某个数一动不动的,比如103 1 2 8 ...原创 2018-07-11 20:10:14 · 548 阅读 · 2 评论 -
PAT 1044. Shopping in Mars
想法就是:把元数列转换为第n项为前n项和的数列,然后再建立hashtable(map也是一样的道理)。先赶下工作,有空再补上书上的解法。#include <iostream>#include <stdio.h>#include <cstring>#include <cstdio>#include <map>#include ...原创 2018-06-28 19:43:50 · 144 阅读 · 0 评论 -
PAT 1085. Perfect Sequence
这么简单的题目搞了半天唉气死我了,讲一讲自己踩过的坑。在二分查找中,千万不能够出现left = mid这样的代码,因为mid = (left +right)/2,这样就可能出现比如left=8 && right=9然后mid=8然后left=mid就陷入死循环了。在寻找第一个比target大的数的时候,一定要加一句判断,最大的数是不是比target小。不然的话,返回的数依然...原创 2018-06-28 16:25:20 · 172 阅读 · 0 评论 -
N皇后问题回顾
N皇后问题是算法问题中一个十分经典的问题,最早提到这个问题的时候还是在大二的算法设计课上面。不得不说那门课的主讲老师——陈建二老师没能上完整个课程整的是一件十分遗憾的事情。这位优秀的老师最难能可贵的不仅仅是拥有两个美帝名校的博士学位,一个数学博士一个计算机博士,更可贵的是他谦卑且诚恳,愿意把自己所知道的都不遗余力的传授给学生。虽然透题小天后讲的也还凑合,但还是十分怀念陈老师在讲台上面的英姿。...原创 2018-06-27 19:02:22 · 248 阅读 · 0 评论 -
PAT 1033. To Fill or Not to Fill
贪心。头无限大。不做了。透。#include <iostream>#include <stdio.h>#include <cstring>#include <cstdio>#include <map>#include <math.h>#include <string.h>#include &a原创 2018-06-27 15:41:15 · 181 阅读 · 0 评论 -
PAT 1070. Mooncake
水题。#include <iostream>#include <stdio.h>#include <cstring>#include <cstdio>#include <map>#include <math.h>#include <string.h>#include <algor原创 2018-06-26 16:08:00 · 156 阅读 · 0 评论 -
PAT 1048. Find Coins
水题。类似于leetcode第一题。简单的说一下散列(aka.散列)。 简单的手,散列就是将元素通过一个函数转换为整数,使得该整数可以尽量唯一的代表这个元素。 比如之前在考察数据结构的时候会经常让我们填散列表,也就是填哈希表,会有以下这些哈希函数。线性探查法再散列法平方散列法而我们在写算法题的时候,用的最多的思想就是空间换时间。直接把key值作为数组的下标。 算法笔记上还有关...原创 2018-06-26 14:25:24 · 165 阅读 · 0 评论 -
PAT 1050. String Subtraction
有两点需要注意。 strlen: 在for循环进行枚举的时候,尽量不要写成 i < strlen(str),因为strlen()函数的内部实现是用循环扫描数组的方式来计算字符串的长度的,所以本身的复杂度就是O(N)。 字符和ASCII: 在c语言中,字符和整数是有很好的转换关系的,具体而言。 C语言中,字符和其ASCII码是等价的,比如’A’这个字符和单字节整数65是等价的. ...原创 2018-06-26 11:39:32 · 167 阅读 · 0 评论 -
PAT 1041. Be Unique
需要注意的一个点就是,map是无序的,所以你用iterator遍历的时候它不会按着你插入的顺序进行遍历。#include <iostream>#include <stdio.h>#include <map>#include <math.h>#include <string.h>#include <algorithm...原创 2018-06-26 10:47:21 · 158 阅读 · 0 评论 -
PAT 1097. Deduplication on a Linked List
这道题目基本照着书上面的代码敲的,也没怎么过脑,简单说一下我的理解。用结构体的序号也就是order巧妙的把该保留的和该去除的很好的区分了开来应该留下的,从0开始编号;要去除的,从maxn开始编号。巧妙地区分开来按着order排序,从小到大,刚好就是:留下的在前,删掉的在后一气呵成#include <iostream>#include <stdio.h>...原创 2018-06-25 20:49:23 · 166 阅读 · 0 评论 -
PAT 1103. Integer Factorization
范围内的p次方的数打表vector直接等号赋值dfs的思路,可以重复选,以打表内的数组每一组选或者不选为dfs的分支注意剪枝#include <iostream>#include <stdio.h>#include <cstring>#include <cstdio>#include <map>#include...原创 2018-08-01 10:44:31 · 183 阅读 · 0 评论 -
PAT 1091.Acute Stroke
一道比较简单的30分的题目,经典的bfs,skr。#include <iostream>#include <stdio.h>#include <cstring>#include <cstdio>#include <map>#include <math.h>#include <string.h>原创 2018-08-01 17:08:35 · 200 阅读 · 1 评论 -
PAT 1079 Total Sales of Supply Chain
一开始用的是bfs,觉得bfs应该也是没有任何问题的。虽然题目给的样例过了,但是测试样例一部分过不了,而且代码量也比深搜要冗长。所以后来就改成dfs。既不需要每次pop以后修改节点的深度,逻辑也更清楚(其实差不多清楚。。)#include <cstdio>#include <queue>#include <algorithm>#include &l...原创 2018-08-06 16:00:49 · 155 阅读 · 0 评论 -
PAT 1076.Forwards on Weibo
bfs的时候这种层数可能最好写在结构体里面。有一个样例超时了。暂时是懒得管了。#include &lt;cstdio&gt;#include &lt;algorithm&gt;#include &lt;iostream&gt;#include &lt;vector&gt;#include &lt;string.h&gt;原创 2018-09-25 12:11:08 · 167 阅读 · 0 评论 -
PAT 1021.Deepest Root
这道题目好像发了第三次的博客了额题目大意:一个连通的并且无环的图可以认为是一棵树。给定一个图,要求输出能够让树的高度最大的节点的编号。如果这样的节点不唯一,从小到大输出;如果不存在,输出图的连通分量的个数。因为N可以达到104的数量级,所以用邻接矩阵的话会超内存。#include <cstdio>#include <algorithm>#include <i...原创 2018-09-19 16:09:12 · 473 阅读 · 2 评论 -
PAT 1013.Battle over cities
回家最好跑一遍#include <cstdio>#include <algorithm>#include <iostream>#include <vector>#include <string.h>using namespace std;const int maxn = 1011;int n,m,k;int vis[m...原创 2018-09-19 11:08:42 · 164 阅读 · 0 评论 -
PAT 1098.Insertion or Heap Sort
首先,关于建堆。建堆需要从下往上去调整,直观的说,这样才能保证最后根节点是比所有孩子节点要大的。堆排序,就是先建堆,把根节点取出来,作调整,循环往复。建堆的时候假设总的节点个数是n。从n/2开始调整就可以了,因为比这个节点小的节点是没有孩子节点的,没有调整的必要了。#include <cstdio>#include <algorithm>#include &l...原创 2018-09-18 16:55:07 · 231 阅读 · 0 评论 -
PAT 1107 Social Clusters
挺简单的题目吧,但是并查集的一个函数写挫了。写demo跑了一下也没啥问题啊,以后还是老实一点吧。#include <cstdio>#include <algorithm>#include <iostream>#include <vector>using namespace std;const int maxn = 1010;int ...原创 2018-08-28 16:49:30 · 224 阅读 · 0 评论 -
PAT 1064.Complete Binary Search Tree
这道题目就很不错啦。 完全二叉排序树按层序存放在从1开始的数组中,左右儿子节点的索引分别为(根节点索引假设为root)root*2和root*2+1。而二叉排序树的中序遍历是递增的。我们现在把输入序列排序,就可以得到中序遍历的序列了。于是我们开始遍历这棵左右儿子节点的索引分别为(根节点索引假设为root)root*2和root*2+1的空树,与以往一边遍历一边打印不同的是,我们是一边遍历,一边给...原创 2018-08-17 17:44:06 · 251 阅读 · 0 评论 -
PAT 1043.Is It a Binary Search Tree
掌握二叉排序树的一些常规操作就可以了。我的思路就是:按照输入的先序遍历建立二叉查找树,然后对这棵二叉查找树进行先序遍历以及镜像先序遍历。两个之中有一个对上,输出”YES”和后序遍历或者镜像后序遍历的序列。两个都对不上就输出”NO”呗。 所以不用怕镜像,也不用管镜像。#include <cstdio>#include <queue>#include <al...原创 2018-08-16 19:25:31 · 173 阅读 · 0 评论 -
PAT 1053.Path of Equal Weight
你怎么那么熟练啊?#include <cstdio>#include <queue>#include <algorithm>#include <iostream>#include <time.h>#include <vector>using namespace std;const int maxn = ...原创 2018-08-15 16:35:47 · 155 阅读 · 0 评论 -
PAT 1102 Invert a Binary Tree
Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so fuck off. ——————————-Max Howell @twitter哈哈哈这句话实在...原创 2018-08-03 11:30:19 · 143 阅读 · 0 评论 -
PAT 1086 Tree Traversals Again
后序遍历打印原来这么简单。。 太久了都忘记掉了。。#include <iostream>#include <stdio.h>#include <cstring>#include <cstdio>#include <map>#include <math.h>#include <string.h>原创 2018-08-02 15:36:46 · 126 阅读 · 0 评论 -
PAT 1004 Counting Leaves
没说明说的吧。如果想用bfs的话。在pop的时候更新深度比较好。#include <cstdio>#include <queue>#include <algorithm>#include <iostream>#include <time.h>#include <vector>using namespace st...原创 2018-08-14 18:38:48 · 206 阅读 · 0 评论 -
PAT 1020 Tree Traversals
传入递归的参数应该是什么,递归返回的参数应该是什么。 这两个问题在写递归的时候都是十分重要的。 直接影响了你代码逻辑的清晰度和可读性。 同时也反映了你对这道题目的理解。#include <iostream>#include <stdio.h>#include <cstring>#include <cstdio>#include ...原创 2018-08-02 11:32:14 · 142 阅读 · 0 评论 -
PAT 1106 Lowest Price in Supply Chain
差不多先生 我的差不多是天生#include <cstdio>#include <queue>#include <algorithm>using namespace std;const int maxn = 100011;struct node{ double data; vector<int> child;}...原创 2018-08-06 18:54:34 · 133 阅读 · 0 评论 -
PAT 1096. Consecutive Factors
用long long加上%I64d就错了,改成普通整型又对了,水题也懒得管了。解体的关键在于下面的: 用暴力破解,一个个地尝试呀~既然是递增连续的因子长度~那么肯定是不重复的几个连着的数字相乘咯~然后就想到了阶乘的概念对不对~~首先题目说了n最大就2的31次方,后来发现2的31次方是介于12的阶乘和13的阶乘之间的大小的,也就是说。所求连续因子的长度再怎么长~也长不过12个数字~那就从le...原创 2018-06-21 18:40:31 · 125 阅读 · 0 评论 -
PAT 1090. Highest Price in Supply Chain
别用遍历,用结构体。不然会超时。练手题。#include <iostream>#include <stdio.h>#include <map>#include <math.h>#include <string.h>#include <algorithm>#include <vector>#in原创 2018-06-21 15:46:05 · 145 阅读 · 0 评论 -
PAT 1094. The Largest Generation
太久没写的话,手就会很生。先是dfs。#include <iostream>#include <stdio.h>#include <map>#include <math.h>#include <string.h>#include <algorithm>#include <vector>using原创 2018-06-21 12:00:59 · 144 阅读 · 0 评论 -
PAT 1009. Product of Polynomials
需要注意的是如果有负数的存在使得原来的系数变成0这个时候总数目减1并且不需要输出对应项#include#include#include#include#include#include#includeusing namespace std;int main(){ double poly1[10][2]; double poly2原创 2016-08-09 10:48:20 · 260 阅读 · 0 评论 -
PAT 1008. Elevator
#include#include#include#include#include#include#includeusing namespace std;#define maxn 505int main(){ int tmp,time,i,n; tmp=0; time=0; scanf("%d",&n);原创 2016-08-09 09:05:59 · 256 阅读 · 0 评论 -
PAT 1005. Spell It Right
#include#include#include#include#include#include#includeusing namespace std;int main(){ char str[110]; char dtoe[10][20]={"zero","one","two","three","four","five","six","seven","eight","ni原创 2016-08-07 21:30:15 · 343 阅读 · 4 评论 -
PAT 1006. Sign In and Sign Out
如果一个人的离开时间比另一个人的到达时间还要早呢?不过这道题目好像不用这么复杂考虑。简单的字符串输入输出问题。直接把时间换成已秒为单位去求解就好了。以上。#include#include#include#include#include#include#includeusing namespace std;#define maxn 505char id原创 2016-08-07 21:06:25 · 405 阅读 · 4 评论 -
PAT 1003. Emergency
思路参考计算最短路径的条数,用dfs会比较的好用。注意dfs函数中的一些细节问题,比如递归结束后设置节点未访问。dfs的参数设置,学习这种带多参的递归方法。#include#include#include#include#include#include#includeusing namespace std;#define maxn 505int原创 2016-08-07 20:33:00 · 391 阅读 · 4 评论 -
PAT 1086. Tree Traversals Again
题目链接为什么数字可以是重复的。。。我用的二维数组来构建树。下标及对应节点的左右指针。结果可以是重复的。我改都没办法改。。#include#include#include#include#include#include#includeusing namespace std;int tree[33][2];int zz=0;int n;int原创 2016-08-02 23:39:26 · 421 阅读 · 0 评论 -
PAT 1020. Tree Traversals
题目链接通过后序和中序的序列来构建这棵树,然后输出层序序列。 思路都是一样的。递归的思想。后序的最后一个点就是根节点,然后就在中序中去寻找该节点。则左边为左子树中序,右边为右子树中序。 一开始用数组去实现的递归,不知为何总是崩溃。于是照着别人的代码敲了一遍。其中的bfs还是要掌握的。还有就是递归的时候要给节点赋予实体。 把Tree *tree= (Tree *)malloc(sizeof(Tr原创 2016-08-01 10:20:48 · 352 阅读 · 0 评论