对乙级题目进行了分类整理,仅代表我个人的分类,不是很严谨。如1087可以集合,也可以哈希;1079也有数字计算和进制转换,但核心问题是字符串处理;1094是判断素数,但也有求字符串子串的使用。
此外,乙级以字符串处理为简单题目,其中涉及:求子串、字符串查找、替换等多个考点,借助结构体实现多条件排序,通常难度适中,且需要借助vector
等数据结构方能实现。建议按类型刷题。
- 15分:简单的编程应用,涉及数组、分支、循环、判断等;
- 20分:比较复杂的编程应用,逻辑复杂,但不涉及数据结构;
- 25分:涉及简单的数据结构的使用,如
vector, map
等,不涉及算法,但涉及一些算法库的使用,如algorithm
里的sort
函数,同样需要合理设计逻辑,如哈希等,不然很容易出错。
整体而言,适合刚入门 OJ 的同学进行练手,就当熟悉常见操作了。
题目整理
类型 | 题目 |
---|---|
数据精度与范围 | 1011,1034 |
进制转换 | 1022,1074 |
数组应用 | 1008,1061,1066,1092 |
素数判断 | 1007,1013,1094 |
哈希 | 1004,1005,1032, 1038,1047,1064,1072,1083 |
字符串处理 | 1002,1003,1006,1009,1014,1017,1018,1021,1023,1024,1027,1028,1029,1031,1033,1036,1039,1042,1043,1044,1048,1052,1056,1057,1067,1076,1078,1079,1081,1084,1086, 1091,1093 |
数学计算 | 1001,1010,1012,1016,1019,1020,1026,1030,1037,1046,1049,1051,1053,1054,1060,1062,1063,1070,1071,1077,1082,1088,1089 |
借助结构体的多条件排序 | 1015,1041,1055,1058,1073,1080,1085,1095 |
map映射 | 1059,1065,1069,1090 |
集合 | 1087 |
链表类 | 1025,1075 |
排序算法 | 1035,1045 |
子串匹配 | 1040 |
螺旋矩阵 | 1050 |
递归查找 | 1068 |
不知为何出错的题目
- 1030 5分,看不懂题
- 1044 看不懂题在说什么,仿佛是为了考试而考试,没意思。
- 1088 18分,一个点没过
- 1033 19分,一个点没过
- 1073 14分,两个点没过,猜测算法设计的不好
记录
本人没学过C++,第一次接触,记录的东西可能有点low。1003,1030看不懂题,不知道他在说什么。1005题目的描述实在花了很长时间才看懂。对于这些题目没有做的兴趣。
scanf
代替cin
可在某种程度上避免超时。- 快速排序前后,主元位置不变,否则常规思路会超时。乙级 1045。
stof
,stoi
完成字符串转数字。乙级 1054。isdigital
传入的变量是char
类型。if
if
else
和if
else if
else
对代码的执行结果影响不一样。- 二维数组的定义:传入常量不能传入参数。乙级1066。
- 输出
3
位数,高位补0:printf("%03d ", arr[i][j]);
。 - 哈希时要考虑空间大小,
int a[99999][99999]
太大了,可以考虑使用 Map。乙级1090。 map
键对应的值不止一个时,值可以考虑用vector
载入。- 数字转字符串:
to_string()
,字符串逆序(algorithm):reverse(s.begin(), s.end());
,乙级1086。 - 虽然链表可以考虑顺序结构和链式结构实现,但巧妙的软换会比两者都好。乙级1075。
map
配合hash
能有效提升程序的效率。乙级1065。- 在不知数据量多少的情况下,读取所有输入
while(cin >> temp)
。乙级1009。 - 尽量避免批量的命名数组,重复的操作很容易超时,同一种思维也能换一种写法。乙级1015。
- 虽然我不知道我的哪里错了,但学习到了
abs(j - i) * 1.0 / x != abs(j - i) / x
。乙级1088。 cin
时注意输入的与声明的数据类型是否有差异。乙级1053。- 尽量不要操作一次删除一次,很容易超时,尽量以下标移动去解决问题。乙级1055。
- 乙级1085,差
20ms
超时。if else
写法比三元运算符写法耗时。
1 | int cmp(node1 a, node1 b) |
不如return a.score != b.score ? a.score > b.score : a.num != b.num ? a.num < b.num : a.id < b.id;
Bug记录
自己发现了一个 bug
,联系了官方,到现在也没个消息,但还是要提醒后来者。(发现时间是2020年2月份,如果它现在改了当我没说)。
在乙级1081题目中,我通过测试代码:虽然代码通过了测试,但仍然有 BUG
。
1 |
|
太乱了测试点出错
上面代码虽然通过了它的测试,但有的测试点并没有正确工作。
错误测试点
1 | 2 |
代码地址
https://github.com/muyuuuu/OnlineJudgeSolutions/tree/master/PAT/%E4%B9%99%E7%BA%A7