ACM程序设计竞赛宣讲会和第一次培训

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

推荐书目 —— 谭浩强《C程序设计教程》
推荐书目 —— Dennis Ritchie《C程序设计语言》
推荐书目 —— 严蔚敏《数据结构》
推荐书目 —— 王晓东《计算机算法设计与分析》
推荐书目 —— CLRS合著《算法导论》
经典的Online Judge —— PKU OJ
经典的Online Judge —— HDU OJ
• 基于比较的排序(Comparison-based sorting)
– 简单排序【时间复杂度:最坏O(N2)】
• 插入排序(Insertion sort) • 选择排序(Selection sort) • 冒泡排序(Bubble sort,较少用)
– 归并排序(Mergesort)【时间复杂度:最坏O(NlogN)】 – 堆排序(Heapsort)【时间复杂度:最坏O(NlogN)】 – 快速排序(Quicksort)【时间复杂度 O(N2),平均情况O(NlogN)】
• 这是一个稳定排序算法(相同 元素排序前后相对位置不改 变)。 • 任何疑问?
排序算法 —— 选择排序算法
• 设待排序的序列S,与一个有序 的序列W。 • 初始条件 W = Φ(空集) • 当 S ≠ Φ 时,
– – 求出i,对于任意j,满足Sj≤Si(升序)。 删除Si并添加到W的末尾。
Si对于k<j满足Sk<Si。(升序)
• 若要求稳定排序,还需


任何疑问?
排序算法 —— 示例代码
排序算法 —— 快速排序概述
• 递归程序设计(Recursive programming)
– 从代码来看:递归就是函数过程自己调用自己。
• 组成
– 边界条件 – 递归过程
– 从设计思路来看:递归就是不断归约到子问题的过程。 – 例子:
• • • • Fibonacci sequence Hanoi problem 今后要介绍的动态规划设计 ……
• 快速排序算法(Quicksort Algorithm)
排序算法 —— 快速排序概述
• 递归程序设计(Recursive programming) • 快速排序算法(Quicksort Algorithm)
什么是ACM/ICPC(国际大学生程序设计竞赛)?
ACM国际大学生程序设计竞赛(英文全称:ACM International Collegiate Programming Contest,ACM-ICPC或ICPC)
– 由美国计算机协会(ACM)主办 – 旨在展示大学生创新能力、团队精神和在压力下编写程序、分析和解决 问题能力的年度竞赛。 – 到今年已成功举办37届(今年是第38届),目前ACM国际大学生程序设 计竞赛已经发展成为最具影响力的大学生计算机竞赛。 – 全球总决赛目前由IBM公司赞助。 – 编程使用C, C++ 或Java程序设计语言。
• 查找速度慢(最坏情况需要遍历整个链表) • 插入,删除数据十分快,也十分方便
– 任何事物都有两面性~
链表?您是个神马东西?
• 单链表。 • entry都是分散的。 • 每个entry保存下一个 entry的指针(内存地 址)。 • 存在一个head标记第 一个entry。 • 优缺点分析?
排序、选择算法
– 一种实现(基于Hoare划分)
自由学习 与 作业
1. 提高自己的编程水平,特别是驾驭程序语言的能力。 2. 试着实现一下双链表,写一个简单的程序,并分析一下它 和单链表的异同,想想神马时候用单链表,神马时候用双 链表。 3. 深入分析快速排序,然后自学堆排序算法。 4. 整理好心态,迎接今后的挑战。
看一道简单的题目 —— 淘淘摘苹果
•描述 Description
–陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶 陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。 –现在已知10个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到 的苹果的数目。假设她碰到苹果,苹果就会掉下来。
• 第一天(Day 1)
– 上午 – 中午 – 下午 报到注册,参观赛区 午餐 开幕式 与 热身赛(2小时,3—4题)
• 第二天(Day 2)
– 上午(8时到9时) 正式比赛(5小时制) – 午餐 在比赛场地进行(面包,火腿之类零食) – 下午(2时之后) 统计结果,颁奖,赞助商讲座
第37届ACM/ICPC全球总决赛(现场照片)
我校代表队在第31届ACM/ICPC世界总决赛中取得好成绩
在2007年3月12日至16日于日本东京举行 的第31届ACM国际大学生程序设计大赛 (ICPC)世界总决赛中,我校由邓鋆、杨 振国和阮政三位同学组成的Love Wisdom 代表队在总教练王浩教授和徐本柱教练的 精心指导下,努力拼搏,再一次突破历史, 取得了并列排名第44名的好成绩。这是我 校第一次参加这样高级别的世界总决赛, 可谓继2006年北京赛区金奖之后再一次创 造我校新的ACM/ICPC记录。本届赛事经 过各大洲举行的赛区预赛,从全球82个国 家的1756所高校的6099支队伍中遴选出 88支代表队参加世界总决赛。我校代表队 在清华大学举行的亚洲北京赛区比赛中脱 颖而出,和清华大学、北京大学、上海交 通大学、中国科学技术大学、复旦大学等 大陆12所高校一同进入世界总决赛,并在 总决赛中顽强拼搏,最终与浙江大学、国 防科大、厦门大学等并列第44名。

数据结构(Data-structures)
– – – – – –

算法(Algorithms)
– – – – – – – – – –
ACM/ICPC用到的开发编译平台
• 建议使用的IDE和文本编辑器:
– – – – Dev-C++(NOIP必备的东西) Code::Blocks(挺好用的开发平台) 记事本(一般开一个敲代码或者编测试数据) Vim和Emacs(高级码农使用)
ACM/ICPC比赛评分、排名标准
• • 竞赛进行5个小时,当解决了一道试题之后,将其提交给评委,由评委判断其 是否正确。若提交的程序运行不正确,则该程序将被退回给参赛队,参赛队 可以进行修改后再一次提交该问题。 竞赛结束后,参赛各队以解出问题的多少进行排名,若解出问题数相同,按 照总用时的长短排名。总用时为每个解决了的问题所用时间之和。一个解决 了的问题所用的时间是竞赛开始到提交被接受的时间加上该问题的罚时(每次 提交通不过,罚时20分钟)。没有解决的问题不记时。 总决赛可以使用的程序设计语言包括c,c++及java。 具体的操作系统及语言版本各年有所不同。
– 5

时间限制 Time Limitation
– 1s
参考代码(C代码)
• 挺简单的,
– 对不对?
数据结构——线性表
• 线性表
– 数组(Array)
• 占用连续的内存空间 • 访问速度快 • 一般不能插入,删除数据(可以做标记来假删除)
– 链表(Chain)
• 分类:单链表(一个next指针),双链表(一个next指针,一个prev指针)
第38届ACM/ICPC杭州区域赛(现场照片)
ACM/ICPC比赛规则
1. 参赛队伍最多由三名参赛队员组成。 2. 竞赛可以使用的语言:C++、C、Java(Pascal现在很少让用了)。 3. 重点考察选手的算法和程序设计能力,不考察任何API和框架方面的知识(例 如WinAPI,MFC,Qt,GTK等等); 4. 选手可携带任何非电子类资料,包括书籍和打印出来的程序等; 5. 评委负责将结果(正确或出错的类型)通过网络尽快返回给选手,除此之外 不提供任何额外帮助; 6. 返回结果: a) Accepted. ---通过!(AC) b) Wrong Answer. ---答案错。(WA) c) RunTime Error. ---程序运行出错,意外终止等。(RTE) d) Time Limit Exceeded. ---超时。程序没在规定时间内出答案。(TLE) e) Presentation Error. ---格式错。程序没按规定的格式输出答案。(PE) f) Memory Limit Exceeded. ---超内存。程序没在规定空间内出答案。(MLE) g) Compile Error. ---编译错。程序编译不过。(CE) 7. 参赛队伍每解答正确一道题目,将会获得对应题目颜色的一只气球。
• •
ACM/ICPC需要了解的知识
• 程序设计语言(Programming Languages)
– – – C,C++语言 Java语言 您了解多少? 线性表(数组,链表) 树(二叉树,多叉树,包括实现平衡树) 图(邻接矩阵,邻接表) 集合(并查集) HASH表 ……(其他奇葩的数据结构) 模拟、枚举 排序、查找 状态空间搜索 贪心 动态规划 图论 博弈 计算几何 数学知识(数论、矩阵等等) ……(其他变态的算法)
排序算法 —— 快速排序概述
• • 递归程序设计(Recursive programming) 快速排序算法(Quicksort Algorithm)
– 算法伪代码
排序算法 —— 快速排序概述
• • 递归程序设计(Recursive programming) 快速排序算法(Quicksort Algorithm)
• 大家听说过多少呢?能简单介绍一下么?
排序算法——插入排序
• 设待排序的序列S,与一个有序 的序列W。 • 初始条件 W = Φ(空集) • 当 S ≠ Φ 时,
– –
• 当 S = Φ 时,输出W。
取出第一个元素S0,插入W的合适位置 (找到一个i,使得Wi<S0≤Wi+1)。 从S中删除元素S0。
ACM/ICPC 比赛流程
NOTE: 各省份可能还有 自己省的省赛。 但这与ICPC关系 并不大。
全球总决赛 (第二年上半年) 设金、银、铜牌
各区域赛 (第一年下半年) 各区域赛分配出线名额参加全球总决赛, 区域赛设金、银、铜牌。
各邀请赛 (第一年上半年) 争夺各区域赛额外参赛名额。
ACM/ICPC 区域赛比赛日程
经典的训练平台 —— USACO Training
•输入格式 Input Format
–输入包括两行数据。第一行包含10个100到200之间(包括100和200)的整数(以厘米为单位)分别表示10个苹 果到地面的高度,两个相邻的整数之间用一个空格隔开。第二行只包括一个100到120之间(包含100和120)的 整数(以厘米为单位),表示陶陶把手伸直的时候能够达到的最大高度。
•输出格式 Output Format
–输出包括一行,这一行只包含一个整数,表示陶陶能够摘到的苹果的数目。
看一道简单的题目 —— 淘淘摘苹果
• 样例输入 Sample Input
– – 100 200 150 140 129 134 167 198 200 111 110

样例输出 Sample Output
– 算法思想:Divide and cvot value,即主元],将待排序序列整理为小于和大于 它的两组连续子序列) • 规约(递归排序两个子序列) • 整理(返回到上一层,直到整个序列排序完毕)
– 算法伪代码 – 一种实现(基于Hoare‘s partition)
ACM/ICPC的特色——五颜六色的气球
ACM/ICPC评测机评测过程
利用编译 器编译选 手的程序
将输入数 据交给编 译的程序
返回编译、 对比结果 给选手
一般有多组测试数 据,如果通过了所有 测试数据,评测机 将返回“通过” (Accepted!)
编译的程 序输出结 果
将输出结 果与标准 答案对比
相关文档
最新文档