
PAT
小鹏同学好!
这个作者很懒,什么都没留下…
展开
-
PAT B1088 三人行-数据类型坑死
这道题本身不难,但有一个很容易被坑的地方:丙的值未必是整数!!!丙的值未必是整数!!!丙的值未必是整数!!!还有一个tips:输出时行首位不得有多余空格,这话可能会没注意到导致大部分的格式错误,不过这个很容易发现,上面那个不是整数要用浮点是真的坑。using namespace std;#include<bits/stdc++.h>void cmp(double t,int m){ if(t>m) cout<<"Cong"; else if(t == m).原创 2020-07-25 21:25:32 · 198 阅读 · 0 评论 -
函数getline(cin,str)使用时易错点
今天做题时,无意间发现一个在使用getline(cin,str)读入字符串时的易错点。因为getline(cin,str)在读取字符串时是可以读入空格的,所以在部分题目输入的情况下,这种输入方式比cin和scanf要更加方便。但非常要注意的是,如果开始输入的时候是数字,且使用cin读入时,空格是不会被读进来的,所以在后面循环读入时,getline(cin,str)会讲数字后的空格先读进来作为a[0],这也就导致了以n为界读取时,总是会少读取最后一行字符串。这时就可以使用getchar()函数来读取第.原创 2020-07-20 21:17:48 · 1063 阅读 · 0 评论 -
PAT-B1065 单身狗
https://www.liuchuo.net/archives/2740using namespace std;#include<bits/stdc++.h>const int maxn=1e5;int a[maxn],id[10000];bool flag[maxn]={0};int main(){ for(int i=0;i<maxn;i++) a[i]=-1; int n,m,tmp1,tmp2; cin>>n; for(int i=0;i&..原创 2020-07-19 21:17:30 · 164 阅读 · 0 评论 -
看似简单的题目往往就有坑——B1051 复数乘法
这道题可以说是真的简单了,就是两个乘加式子的问题,最后再输出控制下就行。但case 2 and 3还真不是那么容易过的。关键就在double类型和三角函数的精度问题,如下代码所示,a and b 输出时需要分别控制在-0.005-0 的范围内均视为0.00输出才能过case 2 and 3.参考博客https://blog.youkuaiyun.com/baidu_32157201/article/details/51055711经测试,本题是可以分开求a1,b1,a2,b2的,也是能够AC的。using.原创 2020-05-12 20:14:45 · 140 阅读 · 0 评论 -
填充二叉查找树(BST)型 中序+层序遍历
//1064using namespace std;#include<bits/stdc++.h>const int maxn=1005;int n,in[maxn],num=0,tree[maxn];void inOrder(int root){ if(root > n) return ; inOrder(2*root); tree[root]=in[num++]; inOrder(2*root+1);}int main(){ cin>>n;..原创 2020-05-11 23:02:01 · 385 阅读 · 0 评论 -
PAT A1010 Radix 膜!算法笔记题解
这道题是有点坑的,题意表述上没有明确,radix的值并不在(0,36)之间,所以暴力遍历是行不通的。反正也不会o(╥﹏╥)o看了下算法笔记关于这道题的题解,根据题解中所述,假定已知的radix都是N1的(若不是则交换),则转换为10进制后N1不会超过long long 的范围,故仅需对N2转换的时候进行判断其是否溢出。下面是算法笔记的源代码:using namespace std;#i...原创 2020-05-02 21:02:20 · 278 阅读 · 0 评论 -
输入输出——sscanf & sprintf
scanf和printf相当于以特定格式从屏幕输入输出;而sscanf和sprintf则是将屏幕换成了字符数组。以PAT B1054 求平均值为例说明:本题意思很简单,但在判断输入数据是否合法中是否最多精确到小数点后2位的判断直接写循环遍历输入的数据并不方便,此时如果会使用sscanf和sprintf的话就会简单很多。如下所示:先定义字符数组a记录输入的数据,再通过函数sscanf将其...原创 2020-04-25 17:16:15 · 320 阅读 · 0 评论 -
从 A1091 Acute Stroke 中看BFS
这道题是由一道基本的二维图中求“1”的块数转化来的,不同于原题是二维,四方向;这道题中将图(即矩阵)扩展为三维,六方向,然后求相连的“1”的块数,同时,题目中要求只有该块内1的数目大于等于T才能算作有效块。Attention:1.题目最后要求的不是块数,而是有效块内的1的数目。2.BFS中记录数组inq记录的是当前位置是否入队而非是否已经访问过,区别在于若仅是是否访问过可能会造成该位置已在...原创 2020-04-17 19:26:03 · 116 阅读 · 0 评论 -
从 A1103 Integer Factorization 中看DFS
此题解法参考《算法笔记》题意解读:输入N,K,P,要求找到K个数(可以相同)的P次方的和等于N,若能找到按要求输出,找不到则输出“Impossible”。分析:因为要求的都是数的P次方,不妨先将不大于N的数的P次方先按序求出来,用一个vector存放,然后再进行DFS,从大到小找(因为题目中要求从大到小输出且多种情况时找所有数字加起来和最大的那个,所以从大到小找可以很方便的解决这个问...原创 2020-04-17 19:01:53 · 114 阅读 · 0 评论 -
PAT A1078 Hashing
这道题做的时候觉得挺简单的一道A25分的题目,只需要判断是否是素数,会用Hash数组记录就行,后来提交才发现测试点3没过去,上网查了下发现,题目意思弄错了,原来不是试一次不行就放弃了,他还需要用QUadratic probing,即二次方探查法进行探查,看看有没有其他位置可以插入。其实仔细想想这个方法在当初学数据结构的时候就已经用到过了,只不过题目中的QUadratic probing不认识(...原创 2020-02-06 20:52:03 · 289 阅读 · 0 评论 -
PAT A1049 Counting Ones
这道题直接的思路就是暴力遍历,但是毫无疑问的是2^30这个量级一定会超时,但是我还是试了试结果咋样hhh暴力遍历代码:using namespace std;#include<bits/stdc++.h>int main(){ int n,i,tmp,sum=0; scanf("%d",&n); int tmp2; for(i=1;i<=n;i++)...原创 2020-02-02 15:17:48 · 128 阅读 · 0 评论 -
PAT B1030/A1085 完美数列
**这道题乍一看,直接两个for循环就可以解决,但仔细一想,10^5的规模,很明显是会超时的,所以有什么能缩减复杂度的方法呢?因为确定了m后,就是查找相应的M,很自然的想到二分查找,这样可以降低复杂度为O(nlongn),可以通过自己写binarysearch()的方法找M,但实际上algorithm头文件下有一个upper_bound()函数可以使用,并且十分方便的找到M,问题到这里看似已经解...原创 2020-01-31 15:18:38 · 317 阅读 · 0 评论 -
PAT B1035/A1089 插入与归并
这道题主要就是插入排序和归并排序,如果你对这两个排序很熟悉的话,就很简单,但是如果你和我一样还很菜鸡,连插入排序和归并排序的算法都没法代码实现的话,就只能抱着一本算法书,照着书上抄代码了,即便如此也是很麻烦的。在写的过程中,会发现“判断两数组是否相同”以及“输出数组”这两个操作在插入排序和归并排序中都需要用到,所以写成函数放在外面会使代码显得精简很多。此外,就是一些小细节了,譬如,题意是不考虑...原创 2020-01-31 15:03:24 · 106 阅读 · 0 评论 -
PAT A1038 Recover the Smallest Number
这道题很容易错以为将数字串按照字典序排序即可,但实际上会发现例子中的321、3214、32不是这样,然后就被困在此处。实际上可以通过另一种贪心策略,即S1+S2<S2+S1的方式排序。除此之外,使用char数组sort很明显是很不方便的,因此需要用到string类型。代码如下:using namespace std;#include<bits/stdc++.h>bo...原创 2020-01-30 12:05:03 · 91 阅读 · 0 评论 -
PAT A1033 To Fill or Not to Fill
这道题适合用贪心算法做,看完题就觉得很复杂,不知道该从哪入手,参考了相关资料后,发现先按距离排序然后一步步计算就可以得出答案,但过程仍然有些复杂,具体可参见代码中的注释。实现算法的过程中很容易出错,关键就在nowTank的值何时变化,怎么变化。using namespace std;#include<bits/stdc++.h>struct node{ double dis;...原创 2020-01-29 16:06:12 · 97 阅读 · 0 评论 -
PAT B1033 旧键盘打字
题目本身不难,但有两点比较坑的地方,一是‘+’表示上档键,若上档键坏了,则所有大写字母无法输出,这一点只要注意到了基本不会错,第二个就很坑了,输入的第一行可能是空字符串,经管你可能想到了这一点,但是由于无法用gets来读入字符串,若使用scanf的话,则测试点3始终过不去,这种代码逻辑没问题,输入出问题是真的很惨。...原创 2020-01-27 12:09:35 · 129 阅读 · 0 评论 -
PAT A1082 Read Number in Chinese
这道题真的太难了,尤其是0的处理,最后参考的算法笔记的code写的。关于0的处理以及个、万、亿的处理真的想不到,还是太菜了o(╥﹏╥)ousing namespace std;#include<bits/stdc++.h>int main(){ char a[10][5]={"ling","yi","er","san","si","wu","liu","qi","ba","...原创 2020-01-21 12:35:52 · 94 阅读 · 0 评论 -
PAT A1077 Kuchiguse
这道题真的是超级无敌巨坑,算法笔记也坑,gets()函数不知道为啥在PAT编译通不过去,只能改用cin.getline(),还有个巨坑的地方在于256个字符至少要257个字节才能存储,算法笔记里面居然只开了256,导致我最后一个测试总是过不去!!!真的被坑惨了,这题做了一个多小时了,垃圾o(╥﹏╥)o虽然逆转后确实好比较些,但开始自己想的时候就是直接从后向前比较的,也是可以做的,下面是AC...原创 2020-01-21 11:28:19 · 164 阅读 · 0 评论 -
PAT B1014/A1061 福尔摩斯的约会
这道题的题意真的描述的很不清楚,首先DAY只能是A~G,不能用A~Z来判断,其次是HH的值,分为两种一种是A-N,另一种是0-9,而且要注意两点,一个是HH的判断紧接着DAY不能从头再来,二是找到HH的值后一定要break,否则就会像我一样,这道题大概做了1个多小时,提交了10遍左右,最后MM的值是在第二对字符串中获得的,非常要注意这道题里面的一对的意思是两个字符串的同一位置处相同,不是让你用...原创 2020-01-18 12:30:23 · 147 阅读 · 0 评论 -
PAT A1065 A+B and C(64bit)
AC代码如下,问为什么这道题不能用double类型直接存储a,b,c,然后进行判断?using namespace std;#include<bits/stdc++.h>int main(){ int t,i=1; long long a,b,c,tmp; scanf("%d",&t); while(t--){ scanf("%lld%lld%lld",&am...原创 2020-01-13 14:52:54 · 172 阅读 · 4 评论