九度OJ 分类

来源:互联网 发布:月度数据分析报告模板 编辑:程序博客网 时间:2024/04/30 11:06
模拟类型(这类题常考,看似不难,但是对于初学者来说,用代码完整地写出题意描述中的意思还是需要多加练习):   
1000 1001 1020 1031 1036 1038(这题请认真读题) 1013 1014 1045 1046 1048 1050 1059 1060 1062 1063 1064 1065 1067(这个题目可以练习最简单的递归,虽然人家不让用递归) 1068(double比float的好处,可以按两种类型分别提交,看结果便知道) 1070 1075(注意细节) 1177 1179 1183 1186  
   
字符串处理(字符串处理对于实验室做项目来说再常见不过了,因此出题往往也会偏向这部分,应该熟练掌握):   
1003 1006(认真读题) 1010 1013 1019 1021 1203(这个题可用灵活的IO代替字符串你想到了吗?) 1032 1049 1055 1058 1059 1182 1192 1199 1206 1334  
字符串里面的常用的简单技术有 查找 替换 字符串转换为数字 要熟练(使用库函数或者自己手写都要熟练)  
   
数学问题:  
质数的判断:1040 1047 1207(略难可不做)  筛素数法不会请百度  
公约数公倍数:1056 1336  辗转相除法  
矩阵的一些问题:1180 1173 1191 1193  
进制转换 1026 1194 今年就考了,基础但是常见啊!  
高精度计算(注意题目描述,注意前导零后续零):1198 1137  
用计算机语言模拟一些数学解题的方法还是有难度的  
   
数组的问题:  
对数组的操作,简单但是很基础  
1004 1018 1039 1052 1053 1057 1066 1174 1334 1363 1375 1398  
   
栈的练习:  
1019 1342  
   
队列的练习:  
1415  
   
排序的练习:  
简单的排序问题:1014 1034 1041 1178 1185 1202 冒泡也好什么也罢但是请一定会手写快排  
归并排序:1004  
堆排序:1416(其实不是排序题,但是要用到堆的思想请体会TLE的原因)  
二叉排序: 1009 1201  
字符串排序:1054 1066 1178(先后顺序决定了一些问题请体会) 1190 1195 1419  
多级排序(多个关键字,学会stl的sort,并为其编写判定函数):1023 1061 1187 1196 1339 1346   
   
链表、指针的问题:  
1181 1788 1789 (后两个题不用指针的话可以用什么做你想到了吗?)  
   
树的练习(加油吧就要胜利了):  
二叉树建树、遍历:1184  
二叉树概念的考察:1176  
二叉排序树的建树遍历:1009 1201  
霍夫曼树(不建树求权值你想到怎么做了吗):1416 1172  
   
(这个略微高端但都是数据结构的的东西建议做做)  
图的概念问题:1027(请体会)  
最短路径问题(请回忆地杰斯特拉和弗洛伊德)  
Djs: 1008 1341 1406 1411  
Fly:1343(这个不是经典的弗洛伊德,但可以用弗洛伊德的思想,djs也可以做请体会)  
并查集的题(不懂并查集请百度): 1012(很典型的)  
最小生成树:  
(并查集+克鲁斯卡尔) 1017 1024 1028 1347 1417(字符串简历索引表)  
并查集用数组做的时候上述题目有的可能会超时,请反思自己的并查集可否优化(提示:还是用数组,仅仅加一行即可)  
图的搜索:(这类可以忽略 真的可以忽略)  
宽搜:1335 1365 1404(后两题可以不做)  
深搜:1012(可以用深搜但是感觉还是并查集好些,建议都练练)  
   
简单递归:  
1067 1073 1408 1205(非递归也要会)  
废话两句  
简单的递归和递推的区别在哪?  
以斐波那契数列为例 1 1 2 3 5 8  a[n]=a[n-1]+a[n-2]  
递归:由未知开始找一个到达已知的道路然后返回解不断迭代a[n]=a[n-1]+a[n-2] 直到 a[3]=a[2]+a[1]=1+1=2  
递推:直接用已知求未知,先求a[3],再求a[4]直到求到所需的a[n]为止。  
简单递归总是超时怎么办?  
1检查边界情况是否都考虑进去,公式是否正确;  
2优化 用一个数组保存已经算过的值,递归的时候会有大量的重复计算,如果加入判断条件 当这个状态计算过之后就直接返回值,会节省很多时间。(略抽象,请仔细体会,不懂也没事)  
   
简单的DP(动态规划) 可以完全不做,没多少人能做出来的 放心吧!  
序列问题:  
基础:1011 1077 1112  1123(1077的升级版真的不难)  
背包问题:  
0-1背包:1364 1420 1123 1152 1209 1358(为什么1358也是背包?请仔细思考,当然我不排除有其他解法)  
完全背包:1072 1395  
废话两句:  
完全背包和0-1背包求解的区别?  
0-1背包从n到a[ i ]开始扫 完全背包从a[i]开始扫到n,至于为什么,如果你有能力做完上面的题,那么你肯定就懂了,如果做不明白果断不做了,没关系考察这部分的概率很小的。  
   
不是经验的经验:  
  首先,拿到题,不要急于上机,首先请认真读题,不行就在纸上比划比划,大概用什么数据结构,数组要开多大,有多少变量,用什么算法要首先想明白,此外,对于数据的规模要有一个概念(10000以上的规模貌似就不能用n*n的算法了),数据的边界值,特殊值需要不需要特殊处理,太乱了就写在纸上吧。慌乱之中编出的程序有很多的逻辑漏洞,debug起来很费力,所以编码前一定保持冷静和清醒。  
  第二,注意变量的名字和初始化的值。变量名字是为了让你的代码有比较好的阅读性,自己记忆起来比较方便。变量的初值直接与你的程序能否正确运行有关系,在变量初始化的时候,请注意你的标记是否跟数据的边界值重合。  
  其次,关于代码的缩进和模块化。据说老师是会拿到上机的代码的,因此请注意你的缩进格式和模块。但是这样做的目的不仅仅是为了取悦你的老师,在自己debug的时候也会十分的方便。利人利己。  
再次,说点debug的事情,有人问devcpp不能调试什么的巴拉巴拉的。其实在调试的时候,可以将自己的中间变量输出,如果你的代码符合我说的上一点,那问题出在哪就会十分的明了。切忌提交的时候要把这部分加上注释或者直接去掉,不然就纠结了。  
  最后,如果你决定做一道题,就一定要将它ac,任何什么“我会了”,“我知道怎么做就行了”都没有ac了来的实在。  
   
附赠一些我经常犯的错误:  
re: 数组是不是少了一位 下标越界情况是否排除?(比如a[-1])  
pe: 空格是不是少了多了?  
Wa: 数据是多组还是一组 大小写 空格问题  
OLE:最外重是否忘记了scanf()==xx  测试的//是不是没有加上  
TLE:最外重是否忘记了scanf()==xx   
=与==的区别  
输入的时候&别忘了!!!  
for()是否多加了; eg: for();  
memset(a,0,sizeof(0)) (自己看看这是哪不对,给数组清零)  
图的自环 重边问题  
是不是有遗忘了的数组未初始化  
数据定义的类型
1 0
原创粉丝点击