重做1111 Online Map (30分)、1105 Spiral Matrix (25分)
0410 A1016
0411 做测试卷
此次之错,下次不犯,如若再犯,立即可断。
- 程序运行不止,队列取队头后没有pop()
- 字符串输入出错,检查开的字符数组是否比实际要存储的字符串长度大1
- 注意任何一个数据的表示范围
- sort函数包含在algorithm头文件,对vector等容器排序时,第一二个参数填(vector.begin(), vector.end())
- 结果出错,可能是整数输出中前面几位‘0’没有输出,采用各式“%04d”。需要特别注意采用输入固定位数的整数,输出格式可能要求类似。
- 部分结果正确,部分错误。
- 注意是否有小数转换成整数,需要注意用ceil,floor还是round
- 注意用于记录次数的数组是否开得不够大,有些题目说输入取值小于等于10000,实际得开到100000
- 静态链表的题需要考虑有些输入的结点是不在由头结点引出的链表中的,因此需要注意输出的结点的数目可能跟输入的结点数不一致。
- 注意是否存在某些中间值溢出错误,比如,a = b * c; a为double,b和c都为int,但是有可能b*c的结果超过int的表示范围,虽然没有超过a的表示范围,但是因为计算时暂存int类型中,导致溢出错误。如1104 Sum of Number Segments (20分)
- 是否某些输出在某种情况下会导致该输出为空,但是应该输出其他的,比如输出0;如A1038
- 浮点错误,除0,取余0,或者数据溢出而导致的除以0或者取余0的情况
- 注意检查递归中的引用传入,将会导致在所有的递归函数中统一引用变量的值,导致错误,如a1143
- double 的输入输出格式.
- 部分结果格式错误,考虑特殊值导致没有输出换行符。如1101 Quick Sort (25分)
- 注意题目的隐含条件,如连通图巴拉巴拉,里面要求图是连通的。
- 一些函数中不仅要传入指针,还要传入指针的引用,否则出错,如需要修改该指针所指的值void insert(node* &r, int a) {
- 需要输出链表或者其他结构体的,先考虑这个链表是否为空。
- 使用map的时候超时,考虑使用unordered_map
技巧
- 对字符串组成的key,用hash替换成int型
- 对图处理时,注意图中 环 出现的可能性,注意对其边的处理。
- int型的最大值:
- #include<limits> numeric_limits<int>::max()
- #include<climits> INT_MAX和INT_MIN
- 可以输出但是却不能用于申请数组
- string里面的函数:substr(from, length) 记得各个参数的意义。
- -std=c++11 stoi()
- 素数的求解
- binary search tree先序遍历产生的序列重新建树。
- abs()绝对值
- memset(): include<cstring> memset(place, value, size)
- fill(from, to, value):
- unordered_set, unordered_map,使用map的时候超时时考虑,需要#include<unordered_map>
- Ctrl+R批量替换
- 如1105 Spiral Matrix (25分)需要在矩阵中画的,需要在草稿纸上画个示例图,帮助分析。
- getline(cin, str)前面有别的输入,需要加入一个getchar()用来吸收前面留下的换行符。#include<string>
- 遇到多个switch类型的问题,记得用map或者数组解决。
-
map<string, vector<node> >valid; for (int i = 0; i < n - 1; i++) { if (a[i].name == a[i + 1].name&&a[i].line == true && a[i + 1].line == false) { valid[a[i].name].push_back(a[i]); valid[a[i].name].push_back(a[i + 1]); } }
-
map<string, vector<int> > stu;
垃圾英文(菜英文,哈哈哈哈)
- radix 基数(进制转换时)
- prime 素数
- chronologically 根据时间顺序地