
甲级代码精炼
如椽大笔_S686
这个作者很懒,什么都没留下…
展开
-
助力PAT甲级/乙级取得满分的小技巧,STL容器
STL容器很多人都会用,但是很多高级玩法或者小技巧很多人都不知道,我在这里给大家提供几个。原创 2020-07-28 00:36:50 · 1221 阅读 · 5 评论 -
PAT/PTA甲级2020春季题目【满分】弃坑贴
PAT甲级备考经验,满分攻略。PAT考试代码2020春季PAT甲级满分经验PAT备考经验,刷题方法。原创 2020-07-25 18:52:25 · 4750 阅读 · 11 评论 -
7-1 Forever (20分)
这个题是我想复杂了,一时半会没明白,导致只能拿半分。最开始我用dfs,写出来堆栈溢出,于是便放弃了原来的思路,转而找规律,未果,,,,后来发现还是dfs+剪枝 给力,我之前一直不注重剪枝的作用,只是在边界情况下才会使用,不曾想被这个题目狠狠抽了一巴掌。3000ms的题竟然最大只需要6ms…剪枝就是挨个讨论,从最高位开始,由于最高位不能为0(不然就是K-1位了),然后每次dfs需要讨论两种情况:1.剩余位都取最大,组成的数能否加起来等于 sum2.当然组成的位值,是否小于等于sum若不是,则剪原创 2020-07-13 21:58:13 · 743 阅读 · 0 评论 -
1148 Werewolf - Simple Version (20分)/1089 狼人杀-简单版 (20分)
定时模拟的时候我寻思着挨个讨论 两个说谎的人,然后得出答案,然后写了半天没写出来。。。但是这个题目是我很久以前写乙级题目的时候做过的,而且当时是顺利做出来了的,我仔细看了一下发现确实不如讨论假设出两个狼人,然后每个人的真是身份就确定了,再看一下每个人说的话能否对的起来真是身份,对的起来就是没说谎,否则就是说谎了。最后统计一下说谎的人数是否为二,即可得出正确答案。附本人AC代码:#include<iostream>#include<vector>#include<ma原创 2020-07-11 17:42:24 · 244 阅读 · 0 评论 -
1151 LCA in a Binary Tree (30分)
这个题建树=死亡,建树的时间+处理的时间 直接超时,哭都没地方哭。。。应该利用原题目给出的序列进行稍加处理,利用找根的方法去挨个比较。附本人代码(参考柳神):#include<iostream>#include<vector>#include<map>#include<set>#include<algorithm>using namespace std;int N, M;vector<int>Vin, Vpost;原创 2020-07-11 16:43:12 · 245 阅读 · 0 评论 -
1131 Subway Map (30分)
这算比较难的一个题了,主要有几个细节需要注意:①:关于某条线路中转站数量的计算:不可以直接通过计算所经过的点是否为中转站,因为即使这个点是中转站,但是在某条线路上仍可能是不需要中转。②:关于输出,切记要按4位输出,不然无法过测试点2附本人代码:#include<iostream>#include<vector>#include<map>#include<set>#include<unordered_map>#include<原创 2020-07-09 15:39:18 · 446 阅读 · 0 评论 -
1096 Consecutive Factors (20分)
这是一个逻辑题,实际上就是双重循环遍历就可以,很容易可以想到因子的最大值为根号N,然后什么情况下会使得连乘为构成N的因子呢,其实很显然,那便是连乘的结果为 N的因子(即N%res==0),这样只要双重循环,外层控制开始元素,不断相乘然后判断结果是否为因子就可以了。附本人AC代码:#include<iostream>#include<vector>#include<math.h>using namespace std;int main() { int N, t原创 2020-07-05 21:24:10 · 266 阅读 · 0 评论 -
1087 All Roads Lead to Rome (30分)
只用dijistr一次性通过,还是挺爽的。附本人AC代码:#include<iostream>#include<vector>#include<string>#include<map>using namespace std;int N, K;const int inf = 100000000;map<string, int>Ma;map<int, string>Mb;vector<int>Happy,原创 2020-07-03 00:07:44 · 263 阅读 · 0 评论 -
1072 Gas Station (30分)
吐血。。。。做这个题的时候人飘了,题目意思都没读清楚就去写了,导致有一个条件忽略掉了,就是:If there are more than one solution, output the one with the smallest average distance to all the houses.也就是说,首先找 最短距离最大者,若相同则选择均值较大者,其次是下标顺序。。。。附本人AC代码:#include<iostream>#include<vector>#原创 2020-07-02 23:00:33 · 236 阅读 · 0 评论 -
1030 Travel Plan (30分)
还是Dijistra+DFS还原路径+二次处理确定最优解的问题。附本人AC代码:#include<iostream>#include<vector>using namespace std;vector<vector<int>>path, fans;vector<int>tmp, val;const int inf = 100000000;int N, M, S, D;int map[510][510], dis[510], map原创 2020-07-02 21:14:48 · 145 阅读 · 0 评论 -
1018 Public Bike Management (30分)
Dijistra寻找最短路径+DFS还原路径,并二次处理得到最佳答案。附本人AC代码:#include<iostream>#include<vector>using namespace std;const int inf = 100000000;int cap, N, S, M, t1, t2, len;vector<int>aval, tmp, val;int map[510][510], dis[510];bool flag[510];vector原创 2020-07-02 20:51:58 · 217 阅读 · 0 评论 -
1003 Emergency (25分)
哭了哭了,这个题目本身很简单,但是我把一个结点默认值设置成了0,导致后三个测试点无法通过,我分析了大半天觉得自己的逻辑很清晰,不会出错。。。结果是因为一个小细节。。。附本人AC代码:#include<iostream>#include<vector>#include<set>using namespace std;const int inf = 1000000000;vector<int>pval;bool flag[510];int map原创 2020-07-02 00:39:07 · 410 阅读 · 2 评论 -
1076 Forwards on Weibo (30分)
刚开始用自以为正确的递归BFS跑(实则为DFS),拿了大半的分数,很郁闷为什么不对,后来仔细一想我那个其实是DFS,在走一条路径的时候把后面的都处理掉了,导致丢失了数据。修改后AC代码如下:#include<iostream>#include<vector>#include<map>#include<string.h>#include<queue>using namespace std;int N, L, val, num, fnu原创 2020-06-30 21:25:44 · 225 阅读 · 0 评论 -
1034 Head of a Gang (30分)
这个题不需要按图的遍历和DFS之类的写,完全可以只用并查集做题。并查集需要注意:① 需要在输入完所有元素以后再计算单个结点的数据② 需要进行比较来确定并查集father附本人并查集AC代码:#include<vector>#include<string>#include<map>#include<iostream>#include<algorithm>using namespace std;struct Node {原创 2020-06-30 21:23:45 · 344 阅读 · 0 评论 -
1013 Battle Over Cities (25分)
这个题目很容易想到是统计去掉某结点以后的连通集个数,因为两个不同的连通集之间只需要加一个边即可变成连通集。在图中常用的统计连通集个数的方法为:①.图的遍历:对每个节点进行dfs,每次把能到达的结点设置为true,这样外层控制进入dfs函数的个数,统计即可得到连通集个数。②.并查集,并查集的思路就很常规了,不断构建并查集的个数,统计根节点的个数即可得到连通集数量。附本人AC代码:#include<iostream>#include<vector>#inclu原创 2020-06-30 15:13:50 · 180 阅读 · 0 评论 -
1098 Insertion or Heap Sort (25分)
堆排序。关键是掌握 向下调整的思想,可以用递归完成,也可以用循环完成。关于insertion sort,判断方法必须是寻找第一个不满足有序的下标,然后从这一点开始往后挨个比较。至于为什么不能采用模拟的方法判断是否为insertion sort,原因很简单,因为可能存在以下情况:103 1 2 7 8 5 9 4 6 01 2 3 7 8 5 9 4 6 0关键在于位置7,8处,你无法断定是在哪个地方完成的当前排序,默认是排序到了最后一次。附本人代码:#include<iostr原创 2020-06-30 13:37:47 · 246 阅读 · 0 评论 -
1107 Social Clusters (30分)
一开始并查集的union函数写错,导致测试点1,4,5过不了。union函数必要从两个顶级根节点去赋值,这样才会使得两个分支连通起来。附本人AC代码:#include<iostream>#include<map>#include<vector>#include<algorithm>using namespace std;int father[1010], hobby[1010];int N;map<int, int>Ma;vo原创 2020-06-28 23:26:36 · 331 阅读 · 0 评论 -
1099 Build A Binary Search Tree (30分)
还是利用BST树的自身特点,利用中序遍历填充树,然后BFS层序遍历输出。附本人AC代码:#include<iostream>#include<vector>#include<algorithm>#include<queue>using namespace std;struct Node { int val, left, right;};vector<Node>V;vector<int>val;int index原创 2020-06-28 17:51:47 · 201 阅读 · 0 评论 -
1064 Complete Binary Search Tree (30分)
这个题目是 完全二叉树和BST的结合,一开始其实我是走了弯路的,后来一看算法笔记的提示,我瞬间想到了利用完全二叉树的特点,即用数组存储树,则左子树=2*root+1,右子树=2 * root+2 此处下标从0开始;又有BST中序遍历为有序序列,所以只属于逆向完成此过程,逆向中序遍历数组,然后按从小到大存储数据。附本人AC代码:#include<iostream>#include<vector>#include<algorithm>using namespac原创 2020-06-28 11:16:17 · 140 阅读 · 0 评论 -
1043 Is It a Binary Search Tree (25分)测试点5,6
测试点5,6均是同一种情况,那便是该BST树的先序和其镜像树的先序序列完全相同,这种情况下要按原树进行后序遍历而不是镜像BST树!BST先序遍历==树的插入顺序BST的中序遍历==有序序列附本人AC代码:#include<iostream>#include<vector>using namespace std;struct Node { int val; Node*left, *right;};void MT1(Node*&T,Node*&原创 2020-06-28 09:35:50 · 470 阅读 · 0 评论 -
1053 Path of Equal Weight (30分)
DFS解决图的遍历求和,需要注意的是此处必须要加到叶子节点才算,不是叶子节点就舍去。附本人AC代码:#include<iostream>#include<vector>#include<algorithm>using namespace std;int N, M, W, id, num, val;struct Node { int id, val;};vector<vector<int>>V, ans;vector<in原创 2020-06-28 00:29:09 · 199 阅读 · 0 评论 -
1004 Counting Leaves (30分)
还是层序遍历,继续BFS,很容易解决。附本人AC代码:#include<iostream>#include<vector>#include<queue>#include<map>using namespace std;vector<vector<int>>V;int leavel[110];map<int, int>Ma;int main() { int N, M, num, id, val, maxl原创 2020-06-27 23:46:21 · 183 阅读 · 1 评论 -
1106 Lowest Price in Supply Chain (25分)
1079题目的改版,测试点还是一样,测试点2是只有根节点的情况,特判输出原价格和数量1就可以了。附本人AC代码:#include<iostream>#include<vector>#include<math.h>#include<queue>using namespace std;bool flag[100010], tmp;int leavel[100010];vector<vector<int>>V;int ma原创 2020-06-27 23:24:04 · 205 阅读 · 0 评论 -
1094 The Largest Generation (25分)
还是层序遍历,老老实实用BFS,队列+while循环实现,写法简单,容易排错。附本人AC代码:#include<iostream>#include<vector>#include<queue>using namespace std;vector < vector<int>>V;int leavel[110], maxnum = 0, countnum[110], maxleavel;int main() { int N, M, i原创 2020-06-27 22:55:17 · 129 阅读 · 0 评论 -
1079 Total Sales of Supply Chain (25分)测试点2
测试点2 的原因是没考虑只有一个根节点的情况;我的思路就是用BFS遍历,不用递归是防止爆栈,感觉题目给的结点数量有点多,递归可能没戏。附本人AC代码:#include<iostream>#include<vector>#include<math.h>#include<map>#include<queue>using namespace std;vector<vector<int>>V;int leavel原创 2020-06-26 22:08:21 · 315 阅读 · 0 评论 -
1086 Tree Traversals Again (25分)
也是根据两个已知的遍历顺序推导出另外一个遍历,我采用的是还原该树的方法,然后用递归遍历。附本人代码:#include<iostream>#include<vector>#include<stack>#include<string>#include<map>using namespace std;bool flag = false;struct Node { int lchild, rchild;};map<int, N原创 2020-06-24 22:30:47 · 159 阅读 · 0 评论 -
1020 Tree Traversals (25分)
树的遍历,根据后序遍历顺序和中序遍历顺序找到层序遍历,这个主要就是挨个找孩子的根节点,利用后序遍历根最后访问的原则,逐步确定子节点先后顺序。值得一提的是,在此处利用完全二叉树的标号顺序,按照找到根节点的次序标号,可以直接找到答案。附本人AC代码:#include<iostream>#include<vector>#include<algorithm>using namespace std;struct Node { int val, leavel;};原创 2020-06-24 21:41:59 · 185 阅读 · 0 评论 -
1091 Acute Stroke (30分)
一开始手写了一个 递归实现的BFS,果然测试点4段错误(递归层数太多,堆栈溢出),于是参照算法笔记按队列实现BFS,对于BFS最好就用while控制循环完成BFS,不仅写法简单,而且无堆栈溢出担忧。附本人AC代码:#include<iostream>#include<queue>using namespace std;struct Node { int x, y, z;};int N, M, L, T, sum, ans = 0;int matrix[1288][1原创 2020-06-24 21:01:45 · 256 阅读 · 0 评论 -
1103 Integer Factorization (30分)
第一个深度优先搜索的题目。很显然这个就是分情况讨论,每次选和不选某值,最终将满足结果的序列筛选出来,我自己写的一个dfs遍历,我比较喜欢对每一个元素进行遍历,用循环控制,这样的好处是避免递归层数太多。但是我写完提交测试发现测试点2,5答案错误,想了半天觉得可能是有答案并列时排序出了问题因为我把排序算法删除,再提交代码仍然是2,5错误。但是我感觉自己的排序函数并没有出错,就很迷。。(测试点2,5错误)#include<iostream>#include<math.h>#i原创 2020-06-23 21:32:22 · 192 阅读 · 0 评论 -
1033 To Fill or Not to Fill (25分)
个人认为这是比较难的一个动态规划题目了,我做了好几次才写出来。核心思想就是从0点开始考虑,寻找在他能行驶的最大范围内寻找一个价格最低的加油站,然后讨论从当前点能否过去,以及该点油价是否小于当前点。然后分情况讨论。附本人AC代码:#include<iostream>#include<vector>#include<map>#include<math.h>using namespace std;struct Node { int add, val原创 2020-06-21 22:16:00 · 247 阅读 · 0 评论 -
1097 Deduplication on a Linked List (25分)
链表做法相同,还是map节省效率,vector输出附本人AC代码:#include<iostream>#include<vector>#include<map>#include<math.h>using namespace std;struct Node { int add, val, next;};map<int, Node>Ma;map<int, int>Mb;void Pri(vector<Node&原创 2020-06-21 22:08:55 · 197 阅读 · 0 评论 -
1052 Linked List Sorting (25分)
和 1074一样的方法,只需要管自己的结点就可以了,不需要处理next,注意最后一个测试点,测试数据最终结果 为0个结点,只需要输出0 -1附本人AC代码:#include<iostream>#include<vector>#include<map>#include<algorithm>using namespace std;struct Node { int add, val, next;};map<int, Node&g原创 2020-06-21 21:50:19 · 170 阅读 · 0 评论 -
1074 Reversing Linked List (25分)
最后一个测试点这个就是有一点点坑的地方,题目中给的结点数量不是所有都有用,意思是部分是需要丢掉的,所以导致后面再讨论进行翻转的时候,总数量不再是num,而是 新的值。附本人AC代码:#include<iostream>#include<vector>#include<map>#include<algorithm>using namespace std;struct Node { int add,val, next;};map<int原创 2020-06-21 21:38:01 · 237 阅读 · 4 评论 -
1022 Digital Library (30分)
这个题用 map对string存储数据就会变得简单很多,我一开始没注意题目要求,还要输出标题,感觉自己测试的没问题,结果测试点全错,后来仔细看了一下才发现问题所在,加上输出标题以后直接AC,并且代码效率很过关。附本人AC代码:#include<iostream>#include<string>#include<map>#include<vector>#include<algorithm>using namespace std;map原创 2020-06-21 21:05:20 · 192 阅读 · 0 评论 -
1051 Pop Sequence (25分)
还是那个老配方,找规律。不过一开始忽略了几个地方1.即使在输入过程中已经得到了答案,仍需要继续输入完,不然会影响后面的输入。2.在for循环里面的变量控制,注意切莫思维定式随手写成了i++,因为你可能二次循环用的变量不再是i。附本人AC代码:#include<iostream>#include<vector>#include<algorithm>using namespace std;vector<int>ans;bool isright(原创 2020-06-21 20:45:40 · 173 阅读 · 0 评论 -
1071 Speech Patterns (25分)
最后一个测试点如果过不去,那么一定是忽略了最后一次输入为合法的情况,即:Can1: "Can a can can a can? It can如这个测试点,如果不考虑最后终止位,那么将丢掉最后一个can附本人AC代码:#include<iostream>#include<string>#include<map>#include<cctype>using namespace std;map<string, int>Ma;int原创 2020-06-21 00:56:51 · 184 阅读 · 0 评论 -
1054 The Dominant Color (20分)
统计相同元素出现次数的最大值,并输出元素。过于简单了,直接上代码#include<iostream>#include<map>using namespace std;map<int, int>Ma;int main() { int N, M, tmp, max = 0, index; scanf("%d%d", &N, &M); for (int i = 0; i < M; i++) { for (int j = 0; j &l原创 2020-06-21 00:23:51 · 186 阅读 · 0 评论 -
1100 Mars Numbers (20分)
这个考察的是map的使用吧,字符串映射数字。附本人AC代码:#include<iostream>#include<map>#include<cctype>#include<string>using namespace std;map<string, int>Ma1,Ma2;string name1[13] = { "tret","jan","feb","mar","apr","may","jun","jly","aug","sep"原创 2020-06-20 23:43:26 · 169 阅读 · 0 评论 -
1063 Set Similarity (25分)
一开始理解错了题目意思,导致想复杂了。理清题目要求以后,题目简单了很多。附本人AC代码:#include<iostream>#include<set>using namespace std;set<int> S[51];bool flag[100000];int main() { int N, val, res, M; scanf("%d", &N); for (int i = 0; i < N; i++) { scanf("%d"原创 2020-06-20 22:40:33 · 142 阅读 · 0 评论 -
1047 Student List for Course (25分)
emm,cin输入对效率的影响可真是太大了,这个题只能读取string用cin其他数据只能用scanf,不然最后测试点超时!附本人AC代码:#include<iostream>#include<string>#include<vector>#include<map>#include<algorithm>using namespace std;map<int, vector<string>>Ma;int ma原创 2020-06-18 00:12:32 · 147 阅读 · 0 评论