PAT
xiaoh1999
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
PAT A1057 Stack 二分写法
题目地址这道题考的是优化, 肯定能拿分, 但是拿满分需要一点思考, 《算法笔记》上面用分块的方法来处理, 效率很高, 但是有点复杂, 分块也算是比较冷门的处理手段, 这道题用二分来做也可以, 而且很简单, 用空间换时间。//我知道这道题可以分块思想来写 但是我忘了 并且我想到另外一种方法 二分法 还更简单 不过效率上面来说 比分块差很多#include <cstdio>#include <algorithm>#include <vector>using nam原创 2020-07-16 21:09:43 · 276 阅读 · 0 评论 -
PAT A1113 Integer Set Partition 最简短代码
题目链接这道题重视的是思路和读题, 如果用numeric里面的accumulate函数, 几行代码就解决了。AC代码如下:#include <cstdio>#include <algorithm>#include <numeric>using namespace std;int seq[100010];int main(){ int n; s...原创 2020-04-21 03:46:34 · 283 阅读 · 0 评论 -
PAT A1102 Invert a Binary Tree 另外一种思路
题目链接这道题《算法笔记》上面的代码中规中矩, 值得借鉴, 但其实考试的时候不需要写这么复杂, 甚至感觉, 算法笔记上面的思路有点奇葩, 不过作为思维训练的话, 还是很不错的。长话短说 ,对这道题 ,我们完全没有必要把树翻转过来, 只需要在输出的时候反过来输出就行了。 比如说, 以前的中序遍历代码, 我们是按照左孩子——根节点——右孩子 遍历,现在改成右孩子——根节点——左孩子 顺序即可...原创 2020-04-17 06:07:57 · 261 阅读 · 0 评论 -
PAT A1084 Broken Keyboard 不动脑的代码方案
题目链接这道题手下留情了, 只用 散列 就可以做出来, 基本上没什么坑点.所谓不动脑, 就是说能用库函数解决的 , 就全用库函数解决, 代码越短越好。AC代码如下 , 思路很简单。#include <cstdio>#include <string>#include <iostream>#include <cctype>using na...原创 2020-04-11 18:58:45 · 221 阅读 · 0 评论 -
PAT A1074 Reversing Linked List 中 sort 函数的另类写法
题目链接这道题算法笔记上面用 sort 来做,不算特别难, 但其实还可以更简单。最近在使用 min_element() 和 max_element() 函数的时候, 发现 sort 排序其实有更简单的另类写法, 并不需要定义 cmp 函数。这道题我的第一次代码如下(按照算法笔记的思路来的):#include <cstdio>#include <algorithm>...原创 2020-04-04 04:28:23 · 202 阅读 · 0 评论 -
PAT A1065 出错分析 和 编译器比较
题目链接这道题非常奇怪 。第一数据范围奇怪, 数据范围是[-263,263], 如果真是这样 long long都满足不了, 右边界 263 已经超过long long 范围了。好在这道题里面好像没有这个数据。第二个奇怪的点是, 在判断溢出的时候, 在g++ 编译器里面不能用 临时变量判断是否溢出。比如不能这么写:if (a<0 && b<0 &&am...原创 2020-04-01 04:38:43 · 360 阅读 · 1 评论 -
PAT A1053 Path of Equal Weight 三种思路
题目链接这道题中规中矩, 但是在结果的输出上面有点小麻烦, 有三种思路。不控制DFS方向, 再DFS结束以后,对所得的结果进行排序, 然后输出,需要用到 vector;在DFS中就控制DFS的方向, 先搜索大的, 这样子在到达叶结点的时候可以直接进行输出, 也可以先保存再输出。和第一个思路类似, 不控制DFS方向, 但是在递归边界处对结果进行排序。需要用到 priority_queue。...原创 2020-03-26 16:31:06 · 197 阅读 · 0 评论 -
PAT A1051 Pop Sequence 朴素的模拟
题目链接所谓朴素的模拟, 就是说不动脑子的模拟, 题目要干啥 咱就干啥。如下:#include <stack>#include <cstdio>using namespace std;int seq[1010];int main(){ int m,n, k; scanf("%d %d %d", &m, &n, &k); fo...原创 2020-03-25 19:26:13 · 194 阅读 · 0 评论 -
PAT A1049 Counting Ones string 写法
题目链接我在想这道题能不能用递归来写,递归了半天也没有弄成功,最后还是用原始的方法来写出来了,这道题本质上是一个排列组合题,一个完全的数学问题,如果没有想到好的方法的话,很难拿满分(但是拿一个22分还是很简单的).我在原始方法的基础上改进了一下, 用 string 来写, 降低了难度。如下:#include <cstdio>#include <string>#i...原创 2020-03-24 17:06:06 · 186 阅读 · 0 评论 -
2019冬季PAT甲级 题解和反思
非科班跨考, 本专业课考试也集中在12月份, 没有太多时间来复习PAT, 11月中旬把甲级题库155道粗略地刷完了一遍(在《算法笔记》的帮助下),然后从头开始二刷, 做了十几题以后觉得刷不完了, 加上其他考试的压力, 便搁置刷题计划, 考前一天将题库里面的关于图和树的题目的代码粗略地看了一遍,心想这次12月考试对明年的考研帮助也不大, 就当练手, 结果运气好, 考了满分。这次的题目不难, 会写H...原创 2019-12-08 01:03:15 · 1083 阅读 · 0 评论 -
PAT B1003 我要通过! 递归训练
题目链接这道题和PAT A1003一样, 都属于排在原创 2019-11-18 00:48:27 · 244 阅读 · 0 评论 -
PAT A1139 First Contact DFS写法和简单写法
题目链接这道题卡了好长时间, 有必要记录一下。可以用DFS+剪枝来遍历求解, 没到下一层就减去一部分不合理的情况, 不会超时。如下://我的电脑上面用不了#include <bits/stdc++.h>//DFS的剪枝条件一定要全面 DFS全局变量最好是计数 千万不要是索引 不要过度使用//id 一定要用 %04d 这样的形式输出//还有0000 和 -0000 的区别 这...原创 2019-11-14 01:03:50 · 485 阅读 · 0 评论 -
PAT A1114 Family Property 套路代码 并查集+排序
题目链接我看别人代码觉得思路请求, 我就只会用固定的套路和格式。#include <cstdio>#include <set>#include <vector>#include <algorithm>using namespace std;struct Node{ int id; double number,area; int p...原创 2019-11-08 14:51:01 · 176 阅读 · 0 评论 -
PAT A1040 Longest Symmetric String 暴力写法和动态规划
题目链接题目数据量很小, 暴力写法完全可以, 思路简单:#include <cstdio>#include <cstring>#include <string>#include <iostream>using namespace std;bool isSymmetric(string a){ int len=a.length(); ...原创 2019-11-02 23:51:39 · 175 阅读 · 0 评论 -
PAT A1072 Gas Station 一种排序套路写法
题目链接随着刷题的进行, 越来越趋向于用套路来写, 而不是靠思考, 例如本题, 就适合用Dijkstra+sort来写。套路如下:#include <cstdio>#include <algorithm>#include <cstring>using namespace std;const int maxV=1100;const int INF=...原创 2019-11-02 02:35:51 · 286 阅读 · 0 评论 -
PAT A1021 Deepest Root 并查集+set写法
题目链接《算法笔记》上提到这道题用set更方便, 确实如此, 这道题的规则简直就是为set 量身定制的, 如下:#include <cstdio>#include <set>#include <vector>#include <algorithm>using namespace std;const int maxV=100010;ve...原创 2019-10-31 00:44:46 · 209 阅读 · 0 评论 -
PAT A1094 The Largest Generation 的 DFS 和 BFS 解法
题目链接这道题完全是套路,自己想肯定是想不出来的,按照套路写,想都不要想。DFS套路如下:#include <cstdio>#include <vector>using namespace std;vector<int> child[110];int hashTable[110]={0};void DFS(int index, int level)...原创 2019-10-23 21:28:09 · 182 阅读 · 0 评论 -
PAT A1051 Pop Sequence 简单思路
题目链接《算法笔记》上的思路也不算难, 但是并不是我写这道题的第一想法,我们其实可以不用从头比较到尾, 只要我们在某一项遇到不符合条件的,就可以直接输出NO了。我的思路如下:以 5 6 4 3 7 2 1为例,我要让栈弹出5,首先我要把1 2 3 4 5装进去,然后比较栈顶和弹出去的这个值是否一致,一致,则弹出去,并且下次往栈装数的时候从6开始装,不一致,直接输出NO,读下一个数据。这里5和5...原创 2019-10-16 21:15:01 · 237 阅读 · 0 评论 -
PAT A1029 Median 简单写法
题目链接《算法笔记》上面的方法,优点是平均耗时比较快一点点, 但不够简单。书上的参考代码如下:#include <cstdio>const int maxn=1000010;const int INF=(1<<31)-1;int s1[maxn],s2[maxn];int main(){ int n,m; scanf("%d",&n); for (...原创 2019-09-26 17:09:23 · 177 阅读 · 0 评论 -
PAT A1022 Digital Library 简短实现和出错分析
题目链接这道题如果不看测试用例的话,可能思路就不明确,但是一看到他给的测试用例,会不自觉地想到map<string , vector< int > >,并且考虑到输出要按升序来, 所以vector可以被set< int >代替。代码如下:#include <cstdio>#include <iostream>#include &l...原创 2019-10-08 15:29:26 · 337 阅读 · 1 评论 -
PAT A1071 Speech Patterns 简单思路
题目链接这题不算太难,我的整体思路和书上差不多,但是实现方法不一样,我是读一个字符,就处理一次,遇到不符合条件的,直接跳过,符合条件的,就计数。书上的代码如下:#include <cstdio>#include <string>#include <iostream>#include <map>using namespace std;b...原创 2019-10-07 16:07:13 · 184 阅读 · 0 评论 -
PAT A1054 The Dominant Color 简单写法(开散列)
题目链接这题用hashTable来写无疑是最简单的,但是为了训练map的套路,《算法笔记》上面饶了弯路, 用map来写,也不算很难。但是这种int对int的映射,在数据并不大的情况下(本题最高到224左右),考试的时候直接开散列,比用map不知道要好到哪去了。书上的参考代码:#include <cstdio>#include <map>using namespac...原创 2019-10-07 14:15:58 · 191 阅读 · 0 评论 -
PAT A1039 Course List for Student 简单写法和 unordered_map 用法
题目链接这道题如果用 map<string, vector< int> >,对最后一个数据,十有八九会超时,但是如果用unordered_map<string, vector< int > >的话,最后一个数据在大多数情况下,能通过(不过也是在危险边缘了,时间限制是600ms, 用 unordered_map的话,大概在350-550 ms 之间)...原创 2019-10-05 17:24:09 · 205 阅读 · 0 评论 -
PAT A1060 Are They Equal简单思路
题目链接这道题想做满分其实是有点难度的,不过得个20分不算太难,《算法笔记》上的思路挺清楚的,如下:#include <iostream>#include <string>using namespace std;int n;string deal(string s, int &e){ int k=0; while (s.length()>0 ...原创 2019-10-05 02:06:55 · 209 阅读 · 0 评论 -
PAT A1024 Palindromic Number 套路写法
题目链接因为我知道这道题出现在《算法笔记》上面大整数那一节,所以就会自然而然地想用大整数的套路,只是代码可能有点长,但是都是套路,所以在思维上不难,套路如下:#include <cstdio>#include <cstring>struct bign{ int d[1010]; int len; bign(){ memset(d,0,sizeof(d));...原创 2019-10-03 16:18:15 · 218 阅读 · 0 评论 -
PAT A1023 Have Fun With Numbers 简单写法
题目链接套路和简单思路总是会冲突,这道题明显可以用大整数乘法的套路来写,但是有点小题大做,因为只是将一个位数在20以内的数字乘上一个2而已。不复杂。用大整数乘法的套路,需要有很多前戏,如下:#include <cstdio>#include <cstring>struct bign{ int d[1000]; int len; bign(){ memse...原创 2019-10-03 15:39:04 · 239 阅读 · 0 评论 -
PAT A1096 Consecutive Factors 一种思路
题目链接这道题思路理清楚之后就不是很难了,如下:#include <cstdio>#include <cmath>int isPrime (int n){ if (n<=1) return 0; int sqr=sqrt(n); for (int i=2; i<=sqr; i++){ if (n%i==0) return 0; } retu...原创 2019-10-03 00:28:21 · 182 阅读 · 0 评论 -
PAT A1104 Sum of Number Segments 错误分析
题目链接这题代码很简单,如下:#include <cstdio>int main(){ int n; scanf("%d",&n); double sum; for (int i=0; i<n; i++){ double temp; scanf("%lf",&temp); sum+=temp*(n-i)*(i+1)...原创 2019-09-28 23:46:02 · 216 阅读 · 0 评论 -
PAT A1093 Count PAT's 两种写法
题目链接《算法笔记》上面的思路很巧妙,一开始并没有想到,用了另外一种思路,稍微复杂点,但是时间性能和空间性能都比书上的参考代码好一点。书上的参考代码:#include <cstdio>#include <cstring>int leftNumberP[100010]={0};int rightNumberT[100010]={0};char str[10001...原创 2019-09-26 18:27:28 · 173 阅读 · 0 评论 -
PAT A1048 Find Coins 散列,二分,双指针 解法汇总
题目链接这道题值得好好研究,方法很多,个人感觉散列的方法最好。三种方法汇总:散列:#include <cstdio>int hashTable[1010]={0};int main(){ int n, m; int value[100010]; scanf("%d %d",&n, &m); for (int i=0; i<n; i++){ ...原创 2019-09-26 17:43:21 · 224 阅读 · 0 评论 -
PAT A1059 Prime Factors 简单方法
题目链接《算法笔记》上面的代码很长也不容易理解,时间性能和空间性能都不佳,书上的参考代码如下:#include <cstdio>#include <cmath>struct Factor{ int prime, count;}fac[20];int isPrime(int a){ if (a<=1) return 0; for (int i=2; i...原创 2019-08-29 22:37:47 · 216 阅读 · 0 评论 -
PAT B1027 打印沙漏 16行代码方案
题目链接(https://pintia.cn/problem-sets/994805260223102976/problems/994805294251491328)《算法笔记》的写法太复杂了,没有必要,换一种思路,取temp是沙漏顶端到沙漏中间(包括两端)之间的行数,就会简单很多。代码如下:#include <cstdio>#include <cmath>void...原创 2019-08-14 08:56:47 · 195 阅读 · 0 评论 -
PAT A1065 A+B and C投机取巧解法
[ ]题目描述:正常的写法是用long long 定义数据,判断溢出,参考代码:#include <cstdio>int main(){ int t; scanf("%d",&t); for (int i=0; i<t; i++){ long long a,b,c; scanf("%lld%lld%lld",&a,&b,&...原创 2019-08-06 05:21:09 · 124 阅读 · 0 评论 -
PAT A1058 A+B in Hogwarts 8行代码方案
题目链接(https://pintia.cn/problem-sets/994805260223102976/problems/994805284923359232)这个甲级题目和乙级的B1037题基本一样,但更简单,《算法笔记》上面的代码已经很短了,但还可以想得更简单简单一点,因为进位要么是0,要么是1。8行代码方案如下:#include <cstdio>int main()...原创 2019-08-14 14:30:55 · 120 阅读 · 0 评论 -
PAT B1006 换个格式输出整数 8行代码方案
题目链接(https://pintia.cn/problem-sets/994805260223102976/problems/994805318855278592)《算法笔记》上面关于这道题的解法思路清奇,饶了18个弯子,不忍卒读。明明是送分题,哪里需要那么长代码,一个输入,几个输出就可以搞定,都不用中间变量。8行代码方案如下:#include <cstdio>int mai...原创 2019-08-14 15:00:56 · 138 阅读 · 0 评论 -
PAT B1028人口普查20行代码方案
题目的链接:(https://pintia.cn/problem-sets/994805260223102976/problems/994805293282607104)今天看到《算法笔记》上面这道题,觉得书上给的参考代码实在是太臃肿了,都不忍心读完。书上的参考代码是这样的: #include <cstdio> struct person{ char na...原创 2019-08-10 06:42:13 · 215 阅读 · 1 评论 -
PAT A1006 Sign In and Sign Out 20行代码方案
题目链接(https://pintia.cn/problem-sets/994805342720868352/problems/994805516654460928)今天看到《算法笔记》上面的PAT A1006的参考代码,觉得小题大作,和pat b1004和pat b1028用的是同一个套路,但我感觉这个套路并不好,虽然简单直观,但是很啰嗦臃肿。本题书上的参考代码:#include <...原创 2019-08-10 09:01:19 · 224 阅读 · 0 评论 -
PAT B1002 写出这个数 一点小看法
[题目链接(https://pintia.cn/problem-sets/994805260223102976/problems/994805324509200384)《算法笔记》给出的答案是这样的: char str[110]; scanf("%s",str); int len=strlen(str); int sum=0; for (int i=0; i<len; i++){...原创 2019-08-14 17:21:54 · 216 阅读 · 0 评论 -
PAT A1001 A+B Format 14行代码方案
题目链接《算法笔记》上面的参考答案如下:#include <cstdio>int num[10];int main(){ int a,b,sum; scanf("%d%d",&a,&b); sum=a+b; if (sum<0){ printf("-"); sum=-sum; } int len=0; do { num[len++...原创 2019-08-20 06:45:18 · 209 阅读 · 0 评论 -
PAT A1005 Spell It Right 10行代码方案
题目链接《算法笔记》的参考代码思路很清楚,也很简单,作者在这道题的注意点里面提到了sprintf()函数,以下是用sprintf()函数解题的很短小的代码:#include <cstdio>#include <cstring>int main(){ char num[110],ans[110]; scanf("%s",num); int sum=0; for...原创 2019-08-20 07:11:09 · 193 阅读 · 0 评论
分享