写在2019.9.PAT甲级考前

写在2019.9.PAT甲级考前

DEV C++

  1. 工具->编译选项->-编译器->编译时加入以下命令:std=c++11
  2. 工具->编译选项->代码生成/优化->连接器->产生调试信息
  3. 北工大考点还要改成64 bit debug(还是32 bit debug,反正都试试

不能出现汉字,不能用itoa:https://blog.csdn.net/ztmajor/article/details/80938662

将示例输入到控制台有两种方法:https://blog.csdn.net/CrazyOnes/article/details/82558643

近几年PAT报考情况:https://blog.csdn.net/qq_38658814/article/details/82534765

重中之重

1. 几种基本排序算法:插入、冒泡、选择、快速、归并、堆
2. 树的前、中、后、层序遍历,中+其它建立二叉树
3. Dijkstra、DFS、BFS

其它

  1. 各类型范围

    1. 整型

      1. 有符号:

        2字节 [-215, 215-1] = [-32768, 32767],4字节[-231, 231-1] = [-2147483648, 2147483647]

        8字节 [-263, 263-1] = [-9223372036854775808, 9223372036854775807]

      2. 无符号

        2字节 [0, 216-1] = [0, 65535],4字节[0, 232-1] = [0, 4294967295]

        8字节 [0, 264-1] = [0, 1844674407370955161]

    2. 浮点型

      float:比特数为32,有效数字为6-7,数值范围为 -3.4E+38 和 3.4E+38

      double:比特数为64,有效数字为15-16,数值范围为-1.7E-308~1.7E+308

  2. 溢出

    1. 当A > 0, B > 0, A + B < 0时为正溢出
    2. 当A < 0, B < 0, A + B ≥ 0时为负溢出
    3. 注意中间计算过程存在溢出可能性,见A1058
    4. 当答案错误时考虑溢出的可能性
  3. 浮点数判相等:abs(a - b) < 1e-8

  4. 0在各进制下都是0

  5. 注意数字小于10时才能用char存

  6. 转换整型为浮点型:强制类型转换,或 * 1.0

  7. 注意输入输出样例不一定能反应题目要求的数据类型!见B1020

  8. 注意题目中是否隐含输入字符串可能为空的条件,见B1033

  9. 注意题目中字符的限定范围,见B1014/A1061

  10. 注意题目中平均分等数据的取整方式

  11. 注意输出时有没有打错字母

  12. 浮点错误

    1. 除0
  13. 段错误

    1. 越界
    2. 递归调用过多导致堆栈溢出
  14. 格式错误

    1. 画图题出现时,注意题目中埋的坑,见B1027
    2. 结果数为0时,可能要输出空行,见B1045 / A1101
      1. 题目没说的话,可以通过“格式错误”猜测
  15. 答案错误

    1. 反复读题
    2. 反复读代码
    3. 考虑除法造成截断误差、累积误差、float精度不够要double,等等
    4. 考虑溢出
  16. 注意id位数不够输出时需要补0的可能性,见A1025

  17. 要熟悉每行x个数字输出的写法,见B1013

  18. 科学计数法相关题目要多练,见B1024

  19. printf中用%d输出float或者double结果为0:https://blog.csdn.net/rockpk008/article/details/47189267

  20. float和double四舍五入区别:https://zhidao.baidu.com/question/1797268803534225067.html

  21. cout << cout; 编译能过,输出的东西不知道是啥

  22. 命令行中ctrl + z表示EOF

  23. 链表

    1. 注意结点地址输出格式要求
    2. 注意对无效结点的处理
  24. char* 转string可以直接赋值:string=char*

  25. to_string(char) 转换的是char对应的int值

  26. 可以string str = “”; str += pre;但不可以string str = “” + pre; 暂时不知道原因

  27. char数组是以’\0’结尾的

  28. getline(cin, str, ‘\n’);

  29. string中的find():https://www.cnblogs.com/wkfvawl/p/9429128.html

  30. sscanf用法:https://blog.csdn.net/yanyanwenmeng/article/details/82753014

    1. sscanf(“2013/02/13 14:55:34”,"%d/%d/%d %d:%d:%d",&year, &month, &day, &hour, &minute, &second);
    2. “hh:mm:ss”<=>"%02d:%02d:%02d"
    3. sscanf(“str.c_str(), …”)
  31. < cmath >:

    1. ceil、floor、round
    2. abs
  32. < iomanip >:setiosflags(ios::fixed) << setprecision(1)

  33. < algorithm >

    1. sort
    2. reverse(str.begin(), str.end())
    3. 二分查找
      1. 从小到大的排序数组
        1. lower_bound(begin,end,num):
        2. upper_bound(begin,end,num)
      2. 从大到小的排序数组
        1. lower_bound(begin,end,num,greater() )
        2. upper_bound(begin,end,num,greater() )
      3. 注意上下界的设置,见A1010
  34. < queue >

    1. 升序队列:priority_queue <int,vector,greater > q;
    2. 降序队列(默认):priority_queue <int,vector,less >q; 相当于 priority_queue ;
    3. priority_queue自定义排序:https://www.cnblogs.com/yalphait/articles/8889221.html
  35. < utility >

    1. pair:https://blog.csdn.net/sevenjoin/article/details/81937695
  36. < unordered_map >

  37. vector<vector< int >>写成vector<int, vector< int >>,声明语句不会报错,接下来用到push_back等函数时会出现"request for member ‘push_back’ in…"这样的报错

  38. 若vector vec(n + 1)且使用1-n而不使用vec[0],注意vec[0]的值对排序等后续算法造成的影响

    1. 排序时不应从begin开始而应从begin+1开始
  39. sort自写的cmp函数中,参数类型若漏const会报奇奇怪怪的错误

  40. 使用find函数查找指定数字的下标:https://blog.csdn.net/qq_41970098/article/details/88086244

    用返回的迭代器减去begin()(注意得到的是从0开始的)

  41. vector之间比较:https://blog.csdn.net/liuchuo/article/details/52486206

  42. vector截断:

    1. 任意片段:https://blog.csdn.net/skdchxyrs09/article/details/89925627
    2. resize:https://blog.csdn.net/l1216766050/article/details/85098382
  43. vector 的 resize不能清除原内存已有数据数据

    1. 如此时vector大小为n,再resize(n, value)是不能把数据全变成value的
  44. vector赋值:https://zhidao.baidu.com/question/515060119.html

  45. std::set和std::multiset为有序序列,而hash_set以及hash_multiset为无序序列。

  46. 并交差:https://blog.csdn.net/u013095333/article/details/89322501

    1. set_union(A.begin(),A.end(),B.begin(),B.end(),inserter( C1 , C1.begin() ) );
    2. set_intersection(A.begin(),A.end(),B.begin(),B.end(),inserter( C2 , C2.begin() ));
    3. set_difference( A.begin(), A.end(),B.begin(), B.end(),inserter( C3, C3.begin() ) );

    注意!以上函数要求两个集合必须是有序的

  47. BST左子树<根,右子树≥根

  48. BST的中序遍历序列是不减的

  49. 对完全二叉树当中的任何一个结点(设编号为x,其中根结点编号为1),其左孩子结点的编号一定是2x,而右孩子结点的编号一定是2x+1

  50. LCA:https://www.cnblogs.com/JVxie/p/4854719.html

  51. 求无向图的连通块个数一般有两种方法,见A1013

    1. 图的遍历
    2. 并查集:可能需要进行路径压缩,以避免数据超时
  52. 不能在声明结构体时初始化成员变量:https://zhidao.baidu.com/question/250671496.html

    因为此时并未给其分配内存,初值无法存储。

  53. malloc的语法是:指针名=(数据类型*)malloc(长度)

    1. malloc完记得free
    2. new完记得delete
  54. 逻辑表达式求值优化:https://www.cnblogs.com/southcyy/p/10249085.html

  55. 可以考虑对某些数据进行预处理,从而提高效率

  56. 注意排名并列时是“1、2、3、3、5”而不是“1、2、3、3、4”

  57. cent换算为dollar结果要除以100

  58. 已知起始时间和终止时间,可以不断将起始时间加1,判断其是否到达终止时间

  59. two pointers扫描中可以在两个序列最后都添加一个最大(小)数INF,见A1029

  60. 注意x > 0时,x越大|x|越大;x < 0时,x越小|x|越大

  61. N不会被除自己以外的大于根号N的整数整除

  62. 最大公约数

    1. 更相减损法
    2. 辗转相除法
    3. 最大公约数 * 最小公倍数 = 两数乘积
  63. 哈希冲突解决方法:https://www.cnblogs.com/wuchaodzxx/p/7396599.html

    1. 1145 Hashing - Average Search Time:https://blog.csdn.net/liuchuo/article/details/79819316

      注意查找停止的条件不只是v[pos] = = a,还有 v[pos] == 0!

      注意查找终点是tsize

  64. 大整数运算

    1. 注意判断是否需要用大整数运算
    2. 注意大整数加法和乘法时最后一位的进位
    3. 注意大整数减法和除法时得到的结果要从第一个非0数字开始输出,即注意考虑数据存在前导0的可能性
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值