一、语言基础
a) 基本输入输出方式(ACM课件01)
b) 条件判断(NYOJ 60)
c) 循环体(NYOJ 463)
d) 初步了解结构体
e) *指针(很少会用到,不过一定要掌握)
f) *文件操作
二、数学
a) 基础数学题(NYOJ 11、34、39、57、64、75、97)
b) 素数
i. 素数判断(NYOJ 22、24)
ii. 筛选法求素数(NYOJ 26、187)
c) 欧几里得算法求最大公约数(NYOJ 40、66、111)
d) 排列组合(HYOJ 459)
e) 进制转换(NYOJ 100、244、275)
f) 斐波那契数列(NYOJ 13、76、252)
g) 阶乘(NYOJ 56、65、84)
h) 同余定理&模运算(NYOJ 102)
三、简单排序(NYOJ 255、124)
a) 冒泡法排序
b) 插入法排序
c) sort()与qsort()函数的用法
d) *归并排序(重点了解分治思想)
四、数据类型(了解下列各种数据类型的范围以及它们在C语言中的输入输出方式)
a) int
b) unsigned
c) float
d) double
e) long
f) int64、long long
五、数组操作
a) 一维数组(NYOJ 50、77)
b) 二维数组(NYOJ 29、33)
六、字符串
a) 字符串基础知识(形式理论、存储形式)
b) 字符串处理函数(见百度百科<string.h>)
c) 常见题目(NYOJ 62、113、241、257、264、273)
d) 用字符串处理数学问题(NYOJ 28、73、103)
七、计算几何
a) 常见几何图形求面积(NYOJ 67、)
b) 几何数据处理(NYOJ 6、199)
c) 坐标计算(NYOJ 68、101)
八、基本的时间复杂度、空间复杂度计算
九、递归的应用(用递归的方法求阶乘及斐波那契数列)
一、数据结构
a) 线性表
i. 链表
ii. 栈
1. 括号匹配问题(NYOJ 2)
2. 表达式求职问题(NYOJ 35)
iii. 队列
b) 树
i. 树的定义、基本概念及相关操作
ii. 二叉树、满二叉树、完全二叉树
iii. 哈夫曼树
c) 图
i. 图的存储方式
1. 邻接表表示图
2. 邻接矩阵表示图
ii. 图遍历
1. 深度优先搜索DFS(NYOJ 20)
2. 广度优先搜索BFS(NYOJ 58)
iii. 图的连通性(NYOJ 42)
d) 查找
i. 顺序查找
ii. 二分查找
iii. 哈希表
e) 排序
i. 快速排序
ii. 堆排序
iii. 选择排序
iv. 希尔排序
一、高级算法设计(重点,另外给出例子均为经典例题,其他还有很多扩展需自己多加练习)
a) 贪心算法
i. 活动选择(NYOJ 14)
ii. 过河问题(NYOJ 47)
iii. 背包问题(NYOJ 106)
b) 动态规划
i. 最短路径(NYOJ 18)
ii. 最长不上升/下降序列问题(NYOJ 17、79)
iii. 最长公共子序列(NYOJ 36)
iv. 完全背包问题(NYOJ 860)
v. 01背包问题(NYOJ 311)
ACM小贴士:
① 刷题非常重要
② 但刷题量不代表实力
③ 攀比进度没有任何意义
④ 提交没有完全掌握的AC代码,对于你来说和WA无异
⑤ 往往想要AC一道题,编程技巧仅仅只占20%的比重,而剩下的80%,则被读题和算法思想各占去一半
⑥ ACM不是一个人的事情,合作和交流往往能起到事半功倍的效果
⑦ 在观看别人代码或者请教别人之前,请务必保证你有仔细思考过题目并自己动手尝试过。失去了钻研精神的ACMer没有任何价值
⑧ ACM或者说编程是一门艺术,认真对待你写出的每一段代码,好的代码能给人一种赏心悦目的感觉
⑨ printf是最好的查找错误的工具