acm
本文由swellspirit贡献
ACM
• I can accept failure. but I can‘t accept not trying. Life is often compared to a marathon, but I think it is more like being a sprinter; long stretches of hard work punctuated by brief moments in which we are given the opportunity to perform at our best. If someone gets the best of me, I try not to let that happen again.(Jordan)
• “参与”与“不参与”两个问题:
– 第一:我能获奖么? – 第二:抛开荣誉,从比赛中学到的东西值得我 花费这么多时间吗?
• 答案:ref:刘汝佳 • 第一个问题比较复杂,靠个人把握 • 第二个问题答案是肯定的,但前提是要视野开阔, 不要把自己局限在一个狭小的空间之内。大家都 知道,ACM-ICPC竞赛要求选手具有一定的理论 知识和实践能力,而且在编程上要求速度和正确 性,但我认为重要的一点是,ACM-ICPC能够拍 样选手实践能力和洞察力,这相对理论和技术而 言更难培养。
• 往往,竞赛题目有着统一的外观和很强的应用背 景,而非专门为竞赛而设计,因此有着对立的体 系和相应的文件。程序设计语言,数据结构,算 法设计方法,计算理论等内容都是经典的计算机 科学分支,而高等数据、数论、组合数学、概率 论、图论、组合游戏论、人工智能、计算几何、 计算机图形学、生物信息学等内容也常见于各类 竞赛中,虽然题目只涉及各学科的一小部分内容, 但是对这些知识的理解和实践将有助于对学科进 行更全面、深入地理解。任何知识的学习都离不 开三个方面:理论、模型和实现。
• 理论部分相对比较容易把握,但要求学习 时一丝不苟,善于总结,抓住本质,主要 培养选手的洞察力。模型部分比较灵活, 富于创造性和启发性,不管是模型的建立 还是求解,都需要大量积累和思考,主要 培养选手的创造力。实现部分比较自由, 也是个人风格的体现,很难有一个固定的 标准,但有很多千人经验和模式可以参考, 主要培养选手的正确性和效率。
• 对于选手来说,ACM-ICPC只是生命中一个 很小的部分,但有心人都可以把这段经历 变得重要而有价值,准备ACM-ICPC的日子 是一段麻醉期,也是最有激情,最快乐的, 通常在这样的时期,与志同道合的人建立 的友情也是最可贵的。
• 1、ACM(1-2年级) • 2、项目(3年级) • 4、工作(google or 微软 or 百度 or QQ or IBM) • 数据结构+算法 =程序 • 计算机应用技术 or 软件工程 专业
学习方法
• 1、看书 数据结构 算法 数学 • 2、做题 PKU ,ZJU,论坛,解题报告 • 3、结合
3.初学者如何进行修炼
• 推荐两个网站
– ace.delos.com/usacogate(USACO)
• • • • • • • • • • • • • • 基本功训练 基本算法讲解、
训练 每个题做出后有讲解、代码 闯关模式 初学者推荐Chapter1-4,Chapter5-6挑战性较强 Algorithm Competition - Single Round Match(SRM) 一个月4次左右,有rating 分两个版(Div I, Div II) 参加人数众多 每次比赛后有详细的解题报告、代码 比赛结束后有Practice Room可以继续做 可以查看每一个人的代码 Forum很热闹,外国人非常乐于助人 有$哦,Room前三
– www.topcoder.com/tc
• 国内题库
– http://acm.pku.edu.cn – http://acm.zju.edu.cn – http://acm.tju.edu.cn – http://acm.hit.edu.cn – http://acm.whu.edu.cn 北京大学 浙江大学 天津大学 哈工大 武汉大学
• 国外题库
– http://acm.timus.ru 数学题较多,OI选手必做 – http://acm.uva.es 国外最大题库,人很多, Forum也很热闹 – http://acm.sgu.ru 题较难
• 建议
– 初学时做一定量的题目打基础 – 针对特定的经典算法,做相应的题目练习 – 过题数并不重要,做题数的排名也不重要
• 参考书
– 算法导论英文版
• 入门级读物
– 初读时,前面的数学部分建立基本概念即可,无需深究 – 算法的正确性证明、复杂度分析一定要扎实掌握(Master Theorem要会用,摊还分析了解) – 数据结构部分理解是关键,一些过于复杂的数据结构对于初学者 并不一定要求实现(红黑树、二项堆、Fibbonacci 堆),但基本 的数据结构一定要熟练掌握,要能熟练实现 – 图论经典算法要熟练掌握 – 动态规划要熟练掌握 – 高级部分只用选学一些
• 参考书
– 算法艺术与信息学竞赛 刘汝佳、黄亮
• 较难 适合有一定基础的同学 • 对于初学者仍然推荐第一章和第三章
• BBS
– acm.pku.edu.cn的Web Board(现在已经龙蛇混杂,最好只作为了 解新信息和讨论题目的渠道) – 各大高校BBS的算法版(分类讨论区->电脑技术->Algorithm(或 ACM、ICPC),精华区往往有很多资料和指南
• 推荐
– – – – – – – – bbs.whu.edu.cn(武大) bbs.zsu.edu.cn(中山) bbs.freecity.cn(浙大) bbs.sjtu.edu.cn(上交) bbs.hit.edu.cn(哈工大) bbs.tju.edu.cn(天大) bbs.nju.edu.cn(南大) bbs.scu.edu.cn(川大)
•
一般要做到50行以内的程序不用调试、100行以内的二分钟内调试 成功.acm主要是考算法的 ,主要时间是花在思考算法上,不是花在写程序与debug上。 下面给个计划你练练: 第一阶段: 练经典常用算法,下面的每个算法给我打上十到二十遍,同时自己 精简代码, 因为太常用,所以要练到写时不用想,10-15分钟内打完,甚至关掉 显示器都可以把程序打 出来. 1.最短路(Floyd、Dijstra,BellmanFord) 2.最小生成树(先写个prim,kruscal要用并查集,不好写) 3.大数(高精度)加减乘除 4.二分查找. (代码可在五行以内) 5.叉乘、判线段相交、然后写个凸包. 6.BFS、DFS,同时
熟练hash表(要熟,要灵活,代码要简) 7.数学上的有:辗转相除(两行内),线段交点、多角形面积公式. 8. 调用系统的qsort, 技巧很多,慢慢掌握. 9. 任意进制间的转换
ACM练习建议 转
• 第二阶段: 练习复杂一点,但也较常用的算法。 如: 1. 二分图匹配(匈牙利),最小路径覆盖 2. 网络流,最小费用流。 3. 线段树. 4. 并查集。 5. 熟悉动态规划的各个典型:LCS、最长递增子串、三角 剖分、记忆化dp 6.博弈类算法。博弈树,二进制法等。 7.最大团,最大独立集。 8.判断点在多边形内。 9. 差分约束系统. 10. 双向广度搜索、A*算法,最小耗散优先.
• 第三阶段: 前两个阶段是打基础,第三阶段是锻炼在比赛中可以快 速建立模型、想新算法 。这就要平时多做做综合的题型了。 1. 把oibh上的论文看看(大概几百篇的,我只看了一点点, 呵呵)。 2. 平时扫扫zoj上的难题啦,别老做那些不用想的题.(中大 acm的版主经常说我挑简单的来 做:-P ) 3. 多参加网上的比赛,感受一下比赛的气氛,评估自己的 实力. 4. 一道题不要过了就算,问一下人,有更好的算法也打一 下。 5. 做过的题要记好 :-)
我们的游戏规则
• 专题讲座
– 题目类型 数据结构 搜索 动态规划 图论 数学
• 模拟赛+选拔赛 • 我们的时间安排
• You can Shine