
PAT
北极与幽蓝
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
PAT1003 Emergency (25 分)
1.用fill函数将一个区间的元素都赋同一个值,在<algorithm>里: fill(d, d+MAX, INF);//一维数组d fill(G[0], G[0]+MAX*MAX, INF);//二维数组Gmemset函数在<string.h>里,只能用于置0或者-1。2.细小的错误耗费了大量的时间,写的时候就该认真。#include &...原创 2019-11-30 16:59:26 · 215 阅读 · 0 评论 -
PAT1034 Head of a Gang (30 分)
1.用两个map完成结点的string名字与int下标的双向映射。2.结果也用map,自动实现按key字典序排列。3.难免有细节在编写时考虑不周,需要在debug时调整。(1)每个连通分量结点数目numCount的统计,初值为1,每增加一条边时,若另一个顶点尚未访问才++numCount。(2)处理完一条边,需要把其权值清0防止重复添加。即:bool visited[MAX]是用来...原创 2019-11-30 14:39:36 · 176 阅读 · 0 评论 -
PAT1100 Mars Numbers (20 分)
1.一般整数到其它类型的映射用数组,如果是大整数则需要用map,因为开不出那么大的数组导致读入的整数不能做下标;其它类型到其它类型的映射用map,最常用的就是map<string, int>mp, 而且常常是与int到string映射的数组对应。2.打表查表的方法非常好用!模拟转换(进制转换、字符串转数字)写起来太耗时,20分的题不会那么复杂,要记得有打表查表的方法啊!3.读一...原创 2019-11-30 13:19:14 · 185 阅读 · 0 评论 -
PAT1081 Rational Sum (20 分)
1. 除法和取余运算之前都要检查除数是否为0。2. abs函数在cstdlib里,其它数学函数在cmath里。3.辗转相除法求最大公约数,然后a/d*b求最小公倍数。4.分数化简:为负时使分子问负分母为正(否则输出时负号位置会在分号后面);分子为0;最大公约数5.分数输出:整数;假分数以带分数形式输出;真分数#include <cstdio>//#include...原创 2019-11-28 00:36:10 · 242 阅读 · 0 评论 -
PAT 1098 Insertion or Heap Sort (25 分)
大根堆:根结点值大于其左右子结点值(或者说每棵子树中都是根结点最大)的完全二叉树。完全二叉树通常用数组存放,牢记下标特点:x/2, x, 2x, 2x+1。堆排序:每次交换根结点与最后一个结点值,然后从新的根结点向下调整(最后一个结点不在堆的范围了)。第一轮,使数组中最大元素放到了最后一个位置。排完后数组就是升序的了。别人好的方法技巧要学起来:1.只需要每轮序列...原创 2019-11-28 00:29:40 · 144 阅读 · 0 评论 -
并查集“好朋友” && PAT1107 Social Clusters (30 分)
典型用途:求解等价类问题实现关键:1. int father[N]; //father[i]表示元素i所在类的代表元。如果father[i]=i,说明i是这棵树的根结点(也即这个等价类的代表元),可利用该特点递推地找代表元。若两个元素的根结点相同,说明在同一个等价类中。仅当还不在一个等价类中时才需要合并,注意:合并是让一个等价类的根结点成为另一个等价类的根结点的父亲,如fat...原创 2019-11-28 00:04:32 · 183 阅读 · 0 评论 -
PAT1066 Root of AVL Tree (25 分)
1.新结点也即叶子结点的高度是1而不是0。 newnode->height = 1;2.判断树形时用的是平衡因子,而不是树的高度。。3.根结点bf是2或者-2时才需要调整,其它情况是平衡的不需要调整。所以注意==2判断完了是else if判断==-2而不是直接else。即else if(getBalancedFactor(root) == -2){}4.root应该初始化为NULL,否...原创 2019-11-26 19:23:15 · 195 阅读 · 0 评论 -
PAT1090 Highest Price in Supply Chain (25 分) 1079Total Sales of Supply Chain (25 分)
使用向量数组,将父结点相同的结点下标存在同一个向量中,也即结点i的子结点的下标都存在parentNode[i]中。本质上还是树的层次遍历。(改叫child可能更合适,child[i]表示结点i的所有子结点的下标)。方法一:BFS#include <cstdio>#include <vector>#include <queue>#include &...原创 2019-11-26 11:59:35 · 213 阅读 · 0 评论 -
PAT1064 Complete Binary Search Tree
1. 养成在三元运算符?:两边加括号的习惯。复杂算术表达式最好加括号。2.报错Thread 1: EXC_BAD_ACCESS则重点检查指针或数组下标。如果用了递归,则首先检查递归出口,极有可能是过晚退出递归造成的越界访问。比如退出递归的条件中左右坐标的关系带不带等号,有时是相等一种退出、小于另一种退出。3.把中间结果打印出来有助于定位错误。4.preSequence函数通过计算左子树...原创 2019-11-25 19:33:11 · 152 阅读 · 0 评论 -
PAT1074 Reversing Linked List
#include <cstdio>using namespace std;#include <algorithm>#define MAX 100005struct Node{ int data; int flag;//0:not in; 1: in int add; int next; int order;}node[M...原创 2019-11-22 12:56:05 · 135 阅读 · 0 评论 -
PAT1051 Pop Sequence && PAT1056 Mice and Rice
1051 Pop Sequence#include <cstdio>#include <stack>using namespace std;#define MAX 1005stack<int> s;int a[MAX], m, n, k;int main(){ scanf("%d %d %d", &m, &n, &a...原创 2019-11-22 00:17:05 · 151 阅读 · 0 评论 -
PAT1067 Sort with Swap(0, i)
#include <cstdio>#include <algorithm>using namespace std;#define MAXN 100005int pos[MAXN];int main(){ int n, num; scanf("%d", &n); int left = n - 1; for (int i=0...原创 2019-11-21 00:37:00 · 211 阅读 · 0 评论 -
PAT1101Quick Sort 1093Count PAT's
1101#include <cstdio>#include <algorithm>#define MAX 100005#define INF 0x3f3f3f3fusing namespace std;int a[MAX], leftMax[MAX], rightMin[MAX], result[MAX];int main(){ int n;...原创 2019-11-20 23:16:57 · 140 阅读 · 0 评论 -
PAT(Advanced Level) 1010 Radix
1. 10个数位且进制不定->用int可能溢出,应该用long long存储。 printf("%d\n", __INT_MAX__); printf("%d\n", (1<<31)+1); printf("%d\n", __INT_MAX__+1); printf("%lld\n", __LONG_LONG_MAX__); print...原创 2019-11-19 00:46:48 · 265 阅读 · 0 评论 -
PAT(Advanced Level)1033 To Fill or Not to Fill
贪心:每次都选择当前最好的-->明确选择范围和选择策略1.选择范围:当前站加满油所能到达的所有站2.选择策略:首先选择价格更低的、其次选择可选范围内价格最低的,作为下一站注意加油量以及油量的更新:加多少油、花多少钱、到下一站要掉耗多少油加油后要减去到达下一站耗费的油。若下一站价格更低,则油量只需保证能到达下一站。所以若需要加油,则到达下一站时油量一定是0。...原创 2019-11-17 21:34:50 · 174 阅读 · 0 评论 -
PAT(Advanced Level) 1016 Phone Bills
1.一开始没考虑没有有效通话记录的用户,导致二三测试点没过。看了书上的注意点才注意到这个特殊情况:题目保证了一个测试用例至少有一个匹配记录,但没有保证每个用户都有匹配记录。他们的信息是不能被输出的,包括第一行的姓名月份和最后一行的总费用。加一个bool变量valid,初始化为false,当找到匹配记录时若valid尚为false说明是第一次匹配所以输出姓名月份,标记valid为true。处理完...原创 2019-11-16 17:30:19 · 215 阅读 · 0 评论 -
排序 散列
1.读取字符串方法一:gets(char *s)从标准输入读入一个完整的行,直到遇到换行符。它会用空字符'\0'取代行尾的换行符'\n'。例如:gets(str);方法二:while((str[i++]=getchar())!='\n')若平台不支持gets,可以用getchar一个一个读直到读到换行为止。最后的换行符也保存到字符串里了。方法三:fgets(char *s,in...原创 2019-11-16 11:00:01 · 683 阅读 · 0 评论 -
PAT(Advanced Level) 1073 Scientific Notation
1.思路:底数部分读为字符串,指数部分读为数字。若指数为负,输出0.后输出exp-1个0,再输出底数部分(小数点不输出);若指数为正:若指数大于等于小数位数,则输出底数部分后补exp-count个0(count是小数位数),若指数小于小数位数,输出exp+1位底数后,输出小数点,然后输出底数的剩余部分。2.犯的错误:误以为补0的个数是exp-1。不能仅限于给出的样例,要总结出一般规...原创 2019-10-29 23:47:09 · 142 阅读 · 0 评论 -
PAT (Advanced Level) 1061
总结1.一开始只过了3个测试点,以为理解错题意了,但看别人代码觉得思路差不多,debug也没觉得有问题,后来才猛然发现把s3都错写成s1了。以后复制自己的代码一定要记得改变化了的部分!复制完记得修正!修正!2.判断字符是否是字母、数字,可用ascii范围,也可用isalpha、isdigit。3. 用printf里的%s输出string类型会报错,所以string类型用cout输出。...原创 2019-10-14 00:19:48 · 139 阅读 · 0 评论 -
PAT(advanced level)1035
10351.用password[i].find("1") 判断指定子串是否在字符串中,若返回值是string::npos则说明不在,否则返回位置。2.用<algorithm>中的replace(password[i].begin(), password[i].end(),'1','@')替换字符串中的指定字符,如本句把1替换为@。#include <iostream...原创 2019-10-11 09:16:20 · 166 阅读 · 0 评论 -
PAT(advanced level) 1005
1005自己写的时候用栈倒,但有三个测试点错误。看了别人的代码后重新写,字符串的方便之处在于可以逐位处理。总结:1. string类型的size和length是一样的,遍历处理各字符时常用。2.字符型数字要减去'0'才是对应数值。3.用sprintf把数值类型转为字符串类型,从而能按下标遍历处理各位。4.常量数组的使用,比switch简洁得多。#include <...原创 2019-10-11 09:15:43 · 191 阅读 · 0 评论