pat第一轮刷题总结

6月6日

  • b1033第三个测试点不过

 

  • 4.2散列

6月7日

b1005数组越界

a1048第三个测试点不过,m小于500,但是1000-m可能大于500 

  • 4.4贪心 

6月7日

b1020/a1070  浮点数double输入符号为%lf

a1033 难度爆炸,按着摩擦。注意思路的拟定,第一个加油站是特殊的。因为它必须在杭州附近。输出格式注意。

6月8日

a1037 不出结果,注意循环是否跳出。

a1067 测试点12超时,因为找不在位置上的数会可能会出现n^2的复杂度

a1038 需要学习6.3string用法再做,用char数组比较麻烦

  • 4.5二分法

 6月9日

a1010 radix可以不止36

  • 4.6two pointer 

6月10日

a1085  long long = int *int 是错的,应该为long long = (long long )int *int;

6月12日

a1089 熟悉归并排序。并且初始序列不参与与目标序列的比较。

  • 4.7高效技巧与算法

6月13日

a1101 先排序再比对时间复杂度度为nlog n,活用递推时间复杂度度为n.

  • 5.1简单数学

          6月14日

          b1003 看懂题目意思。总结递推关系。

  • 5.4素数

         6月16日

         a1078 quadratic probing 是二次探测法的意思。

  • 5.5大数据运算

6月17日

a1024 循环退出条件要注意。

  • 6.1vector的常见用法

           6月17日

           a1039 hash字符串计算,字母应该乘以26。会有重复两个id共用一个数字id的情况,出错。

6月18日

a1047 排序可以比较的内容不一定是内部数据,可以是它当指针对应的数据之间的比较。

  • 6.3string的常见用法

           6月18日 

           a1060 没有思路。

  • 6.4map的常见用法

          6月20日

          a1100/b1044 可以把每个数字的表列出来string strtoint,map inttostring。也可以列出一些,再用算法计算。

          a1054 程序的全局变量可用区间非常大。局部变量空间固定,而且比较小。因此大数组定义在全局区比较好。数组定义时            候,下标必须是常量而不能是变量。所以,必须用const,或者常数值。

         6月23日

          a1022 排序不一定一定用sort,可以用set,不过sort快一些。当用cout输出前面补充0的整数时。可以用iomanip这个头文件            设置输出的格式。setw()用来设置宽度,setfill(char)用来填充。

  • 6.5queue的常见用法

        6月23日

        广度优先搜索,需要队列可以直接用。使用front(),pop()之前需要用empty()判断队列是否为空的。

  • 6.6priority_queue的常见用法

        6月23日

        没有front(),back()函数。只有top()访问队伍顶元素,优先级最高的。

  • 6.7stack的常见用法

        6月23日

        模拟递归,防止溢出。递归栈比较小。

  • 6.8pair的常见用法

        6月23日

        头文件#include map中有pair,map.insert(pair)常用。

  • 6.9algorithm的常见用法

        6月23日

         max()min()abs(x)x必须是整数。swap(x,y)交换

  • 7.1栈的应用

        6月24日

        a1051 熟悉怎么用栈输出与输入,以及和一个排列比较,判断。

  • 7.2队列的应用

       6月24日

       a1056  清空队列时候的判定要注意。

  • 7.3链表处理

       6月25日

       a1074 要考虑无效节点。要先列出算法,再写。会有整体性。

       a1032 输入字符的时候记得把前面的缓存的空格给释放掉。好方法是,遍历链表一次,遍历过的标志1,另一个遍历,若访           问到标志位为1的,则证明开始重合了。

       a1052 如果没有一个有效节点,应该输出-1。这个应该注意。

       a1097 读懂题目意思,分成两列还是一列。输出格式要注意。

  • 8.1深度优先搜索

       6月26日

       a1103 整数的乘方应该用自己的函数比较方便,因为double转整数有误差。还有不一定是平方,开平方确定边界其实还是有           一部分余量。可以先把需要的数据列出一个vector,这样就是查询了。

  • 8.2广度优先搜索

       6月27日

       a1091 要注意编程的模块化。而且访问的时候,很容易超出边界。所以要判断坐标是否合法。

  • 9.2二叉树的遍历

       6月27日

       a1020 注意post是后序遍历。创建二叉树可以返回,也可以传引用。创建指针的时候要注意,不能指向局部变量。因为局部         变量在函数结束的时候就失效了。这时候指针指向的是一个无效地址。

       6月29日

       a1086 注意题目。中序遍历,用栈的时候,入栈的顺序是先序序列。因此可以用入栈顺序和出栈顺序确定一个树。

       a1102 反转树,可以先输出右子树再输出左子树。也可以存结点的时候,左右分开存。也可以遍历一遍反转树。

  • 9.3树的遍历

       6月29日

       a1079  可以用深度优先搜索也可以。需要用一个量代替当前深度。这个量应该作为参数传递。边界是子节点没有。还有理           解题目的意思。

      7月2日

      a1094 未考虑只有一层的情况。还有最后假如结果是最后一排,出去的结果没有。因为我写的程序是用下一排作为条件来修        改上一排的数据。

      a1106 要注意层数与个数不要弄混了。段错误一般是访问了数组外。

      a1053 注意循环结构是否包含了不该包含的。

  • 9.4二叉查找树(BST)

      7月3日

      a1043 要注意递归函数的返回。要判定给出的顺序是否可以构成先序序列。可以将序列用插入的顺序构建BST。再遍历比            较。序列插入顺序可以构成二叉树不一定是先序序列。但是先序序列的构成的顺序二叉树它的先序序列一定相同。

      a1064 要注意队列。对于为NULL的指针,不入队列,否则访问就会出错。而且,判断队列是否为空再输出空格应该在最后          判断,在入队完成之后。书里的方法是,按照程序便利的顺序编号,则完全二叉树的两个子节点是2n与2n+1。则可以先建立        一个以数组表示的二叉树。然后遍历过程中,把数据填进去。然后建立之后。按找数组的顺序遍历。就是层序遍历了一遍。

      a1099 count这个在std空间里有重名,所以应该用c比较好。

  • 9.5AVL平衡二叉树

       7月4日 

       a1066 记住模板。max函数属于algorithm,要加命名空间std。

  • 9.6并查集

       7月4日

       a1107 vector的size()是一个无符号数,无符号数减1可能得到是最大的数。可能会访问出界。并查集记住模板。以及记住把         每个单元看作几个节点。自己与自己的一个节点。

  • 9.7堆

       7月4日

       a1098 排序问题。和a1089是一类。要注意和中间序列一样的情况。必须是最后一个顺序一样。即下一步顺序就不一样了。

       sort可以用来模拟插入排序。

  •  10.3图的遍历

       7月5日

       a1013 集合的问题都可以用并查集。并查集是个好东西。难用但是很精密。

       a1021 可以试一试并查集。

       a1034 这题太复杂。涉及字符串的处理,以及字符串与int之间的转化。还有遍历。以及点权和边权的问题。邻接矩阵好像有         用了。边权的时候。要计算全部的边权。就必须把所有的边枚举全。但是便利的过程不要兜圈。所以点的遍历不兜圈。为什         么不用是否访问了点来试图判断该点相关的边是否访问。因为图可能有环。而环在的话,这样会缺少一条边。因此还是每个         点的所有边枚举。访问了一条边,删除一条边。知道所有点访问完全。边也访问完全了。

       7月6日

       a1076 可能会存在回头路。这里只有点有用。还有需要知道当前在第几层。我觉得可以用两个东西来存高度和是否访问比较         好。一个比较难思考。

  • 10.4最短路径

       7月6日

       a1003 要熟练记住模板,以及要思考里面的逻辑。常用之后应该就会用得心应手。最开始还是要抓原理和逻辑。而且,可以         在用Dijkstra算法生成最短距离的过程中。生成到达每个点的最短路径数。比如若是最短路径更新,则路径数等于前一个节           点路径数。若是经过最新节点的路径相等,则该点是一条新的路径。则路径数应该加上这个节点的路径数。同理点权也是。         若是路径更新。则点权必然更新。若是路径相等,则看点权优先级决定是否更新。这样比生成pre数组的好处是。过程中自           动生成,从源点到所有点的最短路径条数和点权最优数,便于查询。用DFS在逻辑复杂的问题里面。使用范围比单独用               Dijkstra大,最好生成路径,然后怎么操作就比较直观方便。

       7月7日

       a1018 题目意思理解错误。巨难。爆炸难度。隐藏的陷阱是,前往过程中调整,回来的路上不调整。而且有三个标尺。还有         要注意,你带的车,可能会变成你最后剩下的车,要自己带回来。**

       a1030 第一遍dijkstra没有疑问,后面的DFS要注意两点。对于不存在的边权应该置为inf。因为邻接表,每个边都访问,会           出错。而且对于一些变量名字可能有冲突,要注意。用两遍dijkstra也可以。但是还不熟练,所以很混乱。

       7月8日

       a1072 典型的dijkstra。三重标尺。重要的是把编号改变过来。不要多访问,会出现段错误。

       a1087 问题1,变量太多,导致全局变量和局部变量重名。影响结果。问题2,路径的下标不是map的下标。重要的是熟练,         在理解的基础上,多做题。还有要注意单个dijkstra的做法,重要的是覆盖与更新的思想。就是什么时候覆盖什么时候更新。         这个更简单,节省时间。但是思路没有dijksta加dfs清晰。

  • 11.2最大连续子序列和we**

       7月9日

       a1007 需要注意,对于特殊情况应该先处理,分开处理比较好。比如特殊例子当全为0时输出-1等。如果要建立一个方案,           能包括这种特例,比较复杂。不如分开讨论,直观,逻辑好。这题某个测试点出错。就是这个特殊例子不好。因为会有特殊         情况没有考虑到。

       a1045 问题没看懂。运用最长不下降子序列。可以灵活变通。比如给定一个顺序。可以把这个顺序映射成为一串数字,增长         的数字。预先处理数据,就可以用了。

       模拟过程。用最长公共子序列。模板是一个对应一个,这里是一个对应多个。只需要稍微改一改就可以了。不需要剔除杂七         杂八的东西。

       a1040 回文的模板要理解记住。矩阵只有半边矩阵有用。而且它是以距离遍历的。而不是坐标。

       7月10日**

       a1068 背包问题。要清楚上个状态和下一个状态的关系。

  •  12.1 字符串hash

        7月11日 

        a1040 要记住二分法。algorithm库函数。

  • 13.1分块思想

        7月11日

        a1057 用来记录所有数的表,可能有重复的。这种思想在计算机操作系统中有。用来查找第几比较有用。

  • 13.2树状数组       

        7月12日

        a1057 用数状数组要掌握三个东西。一个是lowbit(i),还有update函数以及getsum函数。这个可以用来得到某点左边有多少            人。因为它可以得到到目前这个值包括这个值一共有多少个。所以重要的是要有一个排序的东西。

  • 13.3 快乐模拟(我不快乐)

       7月12日

       a1105 要有画圈的概念。如果用两个变量存储目前的x,y值。要注意下x,y的运动轨迹,不要从路径上出去了。因为出去了不           好找回来。若是不用公共坐标,就不会出错。但是比较麻烦。

       a1017 这里模拟排队。可以将窗口存一个数据。来的人存一组数据。人里面把一些不要的数据剔除。然后再依次到达。如果         到达的时间比上一个人结束时间早。就要等待。每次都是挑选窗口等待时间最短的窗口等待。所每次来人,窗口都要排序,         或者遍历找出最小的值,排队,然后更新这个窗口下一次空闲的时间。由于一个节点之后银行才工作。所以对于小于某个时         间的数据。要注意处理。总的思想就是。不仅人要记录信息。窗口也要记录信息。就是什么时候结束服务。这个对于每到来         的人处理等待时间是有必要的。

       7月13日

       a1014 要足以数组向量字符串的下标,容易弄混。要注意。这题是开始的时候在某一时刻之前就可以。而不是结束时候在某         一时刻之前。还有是大于还是大于等于要注意。用队列啊!!!用什么vector,然后把首元素删除,你这不是多此一举                   吗???直接用队列不是很好吗。

       7月14日

       a1026 要注意理解题目意思。当vip队员到达的时候,如果有多个台子空闲,他也会选择vip台子。要记住四舍五入的表达。

你可能感兴趣的:(pat)