- 博客(55)
- 资源 (15)
- 收藏
- 关注
原创 PAT A1087 All Roads Lead to Rome(30 分)----最短路径(加筛选条件)
总结:1.图中的点名称为字母,所以用两个map来进行转换2.先求最短路径集合,再求符合要求的最短路径代码:#include<iostream>#include<vector>#include<map>#include<string>using namespace std;int weight[500];int vi[500...
2018-08-31 18:43:56 307
原创 PAT A1072 Gas Station(30 分)-------图最短路径---比较难点的题
总结:1.这道题用了dijstra算法,关键是开始对G1非数字的处理即Gi处理成i+n;我最后一个测试点开始没过就是因为用s.size()判断输入为数字还是G2,但是其实数据n+m是大于99的代码:#include<iostream>#include<algorithm>#include<vector>#include<string&g...
2018-08-31 16:54:19 1045
原创 PAT A1030 Travel Plan(30 分)
总结:1.常规套路,关键想想怎么存储图,然后就easy了代码:#include<iostream>#include<vector>#include<map>using namespace std;int vi[600];struct road{ int st; int end; int cost; int d...
2018-08-31 13:39:53 109
原创 PAT A1003 Emergency(25 分)----最短路径
总结:这道题坑的地方在于求最大集结救援队是值得一条最短路线上的所有节点之和,而不是所有最短路径上的节点之和深搜(dfs):1.求路径,点权,边权。遍历,最大连通子图。2.两段代码分别使用深搜和dijkstra算法解决的,有兴趣可以两端都看看,第二段代码比第一段快,递归程序消耗大。dijkstra算法相当于非递归版的广度搜索。代码:#include<iostream&...
2018-08-29 23:32:49 430 2
原创 PAT A1018 Public Bike Management(30 分)
总结:该代码有两个测试点没过,因为没有考虑0->2>3>1(2,3,1权值分别为:54,0,78),最大容量为100,这种情况需要send46辆,剩18,而不是send18,剩01.这道题考察了dfs,最短路径问题,加上了送出的车最少和拿回的车最少,主要是自己之前理解出错,导致第一次没通过,第二次的代码是分开做的便于理解代码1;#include<iostr...
2018-08-29 19:15:58 474
原创 PAT A1034 Head of a Gang(30 分)---图3---图的遍历---求符合条件的最大连通子图(序号用字母代替)
总结:1.涉及到图的时候一定要考虑a和b,b和c,那么a和c也有联系2.就是把1 2 3 4 5 换成A B C D E问题就复杂好多3.读题!!!!代码#include<iostream>#include<vector>#include<map>#include<algorithm>#include<string&...
2018-08-29 15:38:41 166
原创 PAT A1021 Deepest Root(25 分)------图2---求最大联通子图和最大深度的节点集合(看)
总结:1.这道题算是相对比较麻烦的一道题,开始题意没读懂,A graph which is connected and acyclic can be considered a tree.开始没明白他说的这个树是什么,被acyclic误导了,以为不能出现三角形这种循环的图,结果是大于2个最大连通子图都不是树2.这道题的麻烦之处在于先要看该图是不是只有一个最大连通子图,如果是则要求最大深度的节点...
2018-08-29 08:58:02 523
原创 PAT A1013 Battle Over Cities(25 分)---图1---求最大连通子图数量
总结:1.关于图的题可能会超时,优先选printf和scanf,优先选邻接表存储代码:#include<iostream>#include<vector>#include<algorithm>using namespace std;int repair = 0;vector<vector<int> >pp;int...
2018-08-28 19:11:29 397
原创 各种排序总结
冒泡排序:https://blog.csdn.net/luoshiyong123/article/details/102981691快速排序:https://blog.csdn.net/luoshiyong123/article/details/80667676选择排序:https://blog.csdn.net/luoshiyong123/article/details/102984...
2018-08-28 17:04:07 722
原创 PAT A1098 Insertion or Heap Sort(25 分)------堆排序(attention)
总结:这道题始终有一个测试点过不去,是因为插入排序如 序列s为:1 3 5 7 7 2 0,这个序列前边5个都是有序的。所以第一个无序元素的时候while(s[i]<=s[i+1])有等号。。。。1.这道题考的是给定一个序列,让你判断是堆排序还是插入排序,对于插入排序,前边为有序队列,后边为无序队列,只要找到有序队列旁边第一个无序数,就可以用sort排序,而对于堆排序,先构建最大堆,...
2018-08-28 16:24:16 612 1
翻译 PAT A1107 Social Clusters(30 分)-----------并查集1
参考:https://blog.csdn.net/a664607530/article/details/73991827总结:1.并查集查找是否在一个根节点下find函数,这道题用f数组保存根节点,如果这个是最终根节点f[i]=-1,如果不是f[i]就是当前i的父亲节点,via[i]表示i爱好的父亲节点,cnt[i]表示-----每一个最终根节点有多少个叶节点代码:#include...
2018-08-26 21:30:03 149
原创 PAT A1066 Root of AVL Tree(25 分)------AVL树的调整------很精彩(attention)
总结:----第一次写---妄图用数组来完成--事实证明是不现实的。。。。。本代码参考:https://www.liuchuo.net/archives/2178总结第一次失败的教训:1.没有理解好rotate的精髓,用数组麻烦得多2.整体代码结构不是特别清晰,通过ac这道题,让我加深了对avl树的理解,以及对树整章的理解。3.这代码难点主要是对插入后的判断和调整,判断主要...
2018-08-25 20:08:49 221
原创 PAT A1099 Build A Binary Search Tree(30 分)----二叉搜索树(非完全)--求层次遍历
总结:1.感觉挺简单的,只要思路清晰,写一遍就全ac了,这种题再给我来一打哈哈哈哈2.掌握层次遍历利用队列----左子树先进队,右子树后进队,主要考察怎么表示一棵树!!代码:#include<iostream>#include<queue>#include<algorithm>#include<vector>using nam...
2018-08-25 14:37:18 192
原创 PAT A1064 Complete Binary Search Tree(30 分)--------------完全二叉搜索树----复习+1
总结:1.给定一组树,我们可以确定一棵完全二叉搜索树,其中的大小关系按从小到大就和中序遍历一样,最先被遍历到的元素最小。代码:#include<iostream>#include<vector>#include<queue>#include<algorithm>using namespace std;vector<int&...
2018-08-25 00:36:17 139
翻译 PAT A1043 Is It a Binary Search Tree(25 分)-----------二叉搜索树与二叉镜像搜索树----必看!
再次申明:本博客仅供个人pat复习之用,某些方法借鉴于某某博客开头会申明本题解答来源:https://www.liuchuo.net/archives/2153总结:这段代码的精妙之处在于以下几个方面:1.按常规出发:判断是否是二叉搜索树--》判断是否是镜像二叉搜索树-》是的话分别求后续遍历否的话--》cout<<"NO";该代码首先假定为二叉搜索树---》在假...
2018-08-24 21:09:17 202
原创 PAT A1053 Path of Equal Weight(30 分)-----树---dfs必看经典题目(attetion)
总结:1.这道题不难,但是是我在pat中遇到的关于树遍历题目相对比较复杂的题目之一了,给我的感觉和图相似,当然图更难。这道题有权,还要求规定sum的路径,还不止一条。2.我的解决办法是用dfs加了sum(从根到叶权之和,以及一个vector参数,用来记录从根到叶都经过了哪些节点),用了map来记录不同sum的路径3.sort()自定义排序过程中遇到了一个问题:[C++] Express...
2018-08-24 14:58:50 167
原创 PAT A1004 Counting Leaves (30)(30 分)
代码:#include<iostream>#include<vector>#include<map>using namespace std;int m, n;int level, maxn=-1;map<int, int>sk;vector<vector<int> >pp;void dfs(int inde...
2018-08-23 21:35:00 114
原创 PAT A1094 The Largest Generation(25 分)----树dfs求最大同层孩子树
代码:#include<iostream>#include<vector>#include<map>using namespace std;int m, n;int level, maxn;map<int, int>sk;vector<vector<int> >pp;void dfs(int inde...
2018-08-23 20:40:14 106
原创 PAT A1090 Highest Price in Supply Chain(25 分)--树---dfs简单应用
总结:1.这道题是dfs简单运用,map简单应用,读懂题意不粗心即可,加油加油~~~~~~~~~~~~~~~~~~~~~~~~~~~~代码#include<iostream>#include<vector>#include<cmath>#include<map>using namespace std;const int maxn...
2018-08-23 19:01:30 93
原创 PAT A1079 Total Sales of Supply Chain--树---dfs遍历
总结:1.在第一次写这道题的时候,我觉着这道题思路挺明确的,不好解决的是题目里说节点数不超过10的10次方有点大了,不好开数组,而且我对于每一道关于树的题我都避免用结构体创建树,怕问题变得麻烦,要么就是通过一个一维数组创建树,或者取巧不创建。2.在这道题中我的思路是每一个节点i都是一个vector[i],vector的大小就是其孩子的个数,在读入数据时候我们要确认根节点以及叶子节点的amo...
2018-08-23 18:02:37 214
原创 1102 Invert a Binary Tree(25 分)--二叉树反转左右孩子
总结:1.做这道题的时候开始没读懂题意,把invert意思记错了,导致左右子树是反的,很无语,刚过了六级看来不够,继续学习英语很有必要。2.做这道题的时候思路应该是很明确的,但是花了一个多小时,为啥呢》》》分析如下:思路:在读入数据的时候确定根节点,然后保存每一个节点的左右孩子节点(反着保存),然后用一维数组递归建立二叉树,层次遍历就很好解决了,中序遍历也很ok,然后这道题应该是很ea...
2018-08-23 15:59:23 380
原创 PAT A1086 Tree Traversals Again(25 分)---树的遍历--由进出栈情况确定树
总结:1.读懂题意,比如这道题可以根据进栈情况确定前序遍历,由出栈确定中序遍历,后序遍历序列就好求了2.入栈序列为前序遍历,出栈为中序遍历 代码:#include <iostream>#include<stack>#include<string>using namespace std;int pre[100...
2018-08-22 16:29:10 201
原创 树1----由中序遍历+前或者后推其余遍历
本文参考柳神博客:https://www.liuchuo.net/archives/2090仅用于复习pat考试用,在此鸣谢柳神这道题思路很明确,用递归处理很简单,但是有几个注意点:对树的理解不当可能造成一些困扰,我会在代码中一一标明本例为已知后序遍历和中序遍历,推前序遍历和层次遍历:1.由后序遍历左右根和中序遍历左根右我们可以确定根的位置和左子树,右子树的个数如根节点为7的时4的...
2018-08-22 15:46:28 137
原创 数据结构之二叉树
#include<iostream>#include<stack>#include<queue>using namespace std;typedef struct tnode TN;typedef struct tnode* TT;struct tnode{ int data; TT left,right;};void cr...
2018-08-16 16:05:35 137
原创 PAT A1022 Digital Library (30)----map图书馆应用
1. while (cin >> key) { pp[key].push_back(id); char c = getchar(); if (c == '\n') break; }读入keywords的时候,用c读取空格,如果c为\n结束代码:#include<iostream&g...
2018-08-13 14:20:38 93
原创 最长连续回文子串--------动态规划3
分析:1.通过枚举的话,遍历起点终点时间复杂度O(n^2),判断是不是回文串O(n),总共是O(n^3)2.动态规划仅需O(n^2),最后通过枚举子串长度和起点来获取最大长度3.动态规划求解时,也可以解决大问题的一个小问题。代码:#include<iostream>#include<string>using namespace std;int ...
2018-08-10 19:53:28 420
原创 PAT A1045 Favorite Color Stripe (30)-------经典LIS最长不下降子列长度
分析:65 2 3 1 5 612 2 2 4 1 5 5 6 3 1 1 5 6上边一个序列为a,下边一个序列为b首先剔除下边一个序列中非公共部分(此题没有,以防有些颜色下边一个序列没出现)---转化成最长不下降子列与常规的最长上升子序列不同的是,这里是最长不下降上升子列,而且这里从新定义了排序规则,不是传统的谁大谁小,而是在a中先出现的值大。思路很清晰,转化为常规的做!...
2018-08-10 16:14:53 114
原创 PAT A1045 Favorite Color Stripe (30)----动态规划之LCS变种经典题目
1.LCS版:代码:分析:(上边串为a,下边为b)65 2 3 1 5 612 2 2 4 1 5 5 6 3 1 1 5 6由题目可知:b串肯定会有重复元素,a串可能有;不同于常规的LCS没有重复元素关键就是递推关系怎么推?1.当a[i]和b[j]不相等的时候:好好想想:当不相等的时候,递推公式不会变,因为不可能有两个最后一个元素诶!关键就是相等的时候怎么办呢...
2018-08-10 15:47:09 197
原创 最大公共子序列-----动态规划2
1.题目描述我们有两个字符串m和n,如果它们的子串a和b内容相同,则称a和b是m和n的公共子序列。子串中的字符不一定在原字符串中连续。例如字符串“abcfbc”和“abfcab”,其中“abc”同时出现在两个字符串中,因此“abc”是它们的公共子序列。此外,“ab”、“af”等都是它们的字串。现在给你两个任意字符串(不包含空格),请帮忙计算它们的最长公共子序列的长度。输入描述:输...
2018-08-09 23:08:07 144
原创 百炼2757-----最大上升子序列-------动态规划1
总结:1.找到一个状态,用ret[i]来表示以i+1结尾的最大子序列的长度。2.找边界条件和递推关系:边界条件:ret[0]=1;起始每个ret[i]至少为1,不妨预处理为1递推条件:ret[i]=ret[i-1]+1;(if(a[i]>a[i-1])); 否则:如果找不到一个子序列最后一个数比a[i]小,那ret[i]=1;2757:最长上升子序列...
2018-08-09 21:45:25 829
原创 PAT A1071 Speech Patterns (25)
有一个测试点过不去a......代码:#include<iostream>#include<map>#include<string>#include<algorithm>using namespace std;map<string, int> pp;bool cmp(char p){ return !((p ...
2018-08-09 16:29:32 221
原创 PAT A1051 Pop Sequence (25)(25 分)----栈的运用
代码:#include<iostream>#include<stack>using namespace std;int a[1100]; //入栈数组;int b[110][1100]; //出栈数组int main(){ int m, n,k; cin >> m >> n >&g...
2018-08-09 13:51:53 221
原创 PAT A1060 Are They Equal (25)----string经典例题(重点复习)
总结:1.对于这类题,首先要弄清楚题意,找到一个合适的方法才会事半功倍,否则就会像我第一次写了一百多行代码发现只过了3个测试点,还有这类问题思考问题一定要全面,否则很容易出错2.这道题的坑主要是在:0.00000123,000123,000.0000,0000这几个数据上,去除第一位位0但是第二位不为小数点的0然后分0.12345(小数部分为0)和123.12344(都不为0)和123...
2018-08-09 10:27:46 190
原创 PAT A1047 Student List for Course (25)------排序方法重点2
总结:1.写这道题的时候第一次只过了一个点,因为思考不周,多输出了"\n",导致格式错误,下次若是格式错误多试几下就好了,然后就是最后一个测试点过不去超时。2.想好思路写代码:真的很快很爽:不怎么需要调试---前提是有思路哈哈哈哈哈哈哈哈!!!3.参考代码中用char[][]二维数组来存名字,比较的时候比较序号的确节省了很多时间,而且代码量几乎减半4.读题一定要读数据范围----否...
2018-08-08 18:36:16 175
原创 PAT A1039 Course List for Student (25)--vector的使用
1.总结:vector真的贼好用,不仅可以根据输入数据设置大小,节省空间,而且可以一维,二维,多维各种数据类型的组合。2.cin,cout这种题肯定会超时,以后注意用char*,scanf和printf3.参考代码用的很巧秒,因为name只有三个字母,可以映射到hash表中(占用数组空间也不大),大大提升了效率4.还是先想思路,在写代码才会下笔如有神!!!代码(最后一个点超时):...
2018-08-08 15:29:55 217
原创 PAT A1024 Palindromic Number (25)----字符串操作注意
Conclusion:1.进位不仅仅加在两个数相加的时候,计算当前位向上进位也要考虑上一位的进位!!!!代码:#include<iostream>#include<string>using namespace std;bool isRT(string s){ for (int i = 0, j = s.length() - 1; i < j...
2018-08-08 10:06:23 148
原创 PAT A1059 Prime Factors (25)(25 分)
总结:1.这次代码写的很流畅而且没出错,原因就是自己之前就想了到底怎么写,下次一定要仔细想了在下手代码:#include<iostream>#include<set>#include<map>using namespace std;multiset<int> pp;void xxx(long long m){ for ...
2018-08-07 23:13:16 215
原创 PAT A1096 Consecutive Factors (20)
总结:1.读懂题:写代码之前想好大致思路,哪个变量用来干什么自己要搞清楚2.不要急躁,写不出来仔细想,别自暴自弃1096 Consecutive Factors (20)(20 分)Among all the factors of a positive integer N, there may exist several consecutive numbers. For examp...
2018-08-07 16:53:22 168
原创 PAT A1088 Rational Arithmetic (20)
总结:1.这种输入输出复杂的题目如果可以一定自己写一个输入输出函数---出错肯定是因为这个函数的问题--我这次就犯了个错误,输出的时候因为一个小括号切换成了中文的小括号。。。。代码:#include <iostream>#include<cstdlib>using namespace std;long long int gds(long long int ...
2018-08-06 22:01:32 172
原创 PAT A1081 Rational Sum (20)(20 分)
总结:1.注意求最大公约数写法:自己开始写的太复杂了long long gcd(long long a, long long b) { return b == 0 ? abs(a) : gcd(b, a % b); }2.考虑周全,分子相加可能会出现0的情况3.从输入数据开始即对每一个分子分母约分,否则后边会超时代码:#include <iostream>#...
2018-08-06 18:31:44 182
基于QT实现的植物大战僵尸游戏.7z
2019-11-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人