- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ACM入门训练指南
目标读者:
想要在ACM/ICPC里进行发展,并通过SDUTOJ进行训练的初学者。
使用语言:
只要会一门程序设计语言,就可以进行ACM 训练了。通过训练,可以更好地
掌握语言使用能力、程序和算法设计能力。
一般通用语言如C、C++和JAVA 都可以,它们有各自的优势和缺点:
1.C 语言设计算法效率比较高,但输入输出的格式控制比较麻烦,而 ACM
对程序进行评测时对输入输出的格式要求比较高,使用C 务必要熟练掌握输入输
出方法。
2.C++封装了输入输出流,方便输入输出操作,减少出错的可能性;C++提
供了非常强大的标准模版库 (STL),使得很多在C 上实现起来比较麻烦的代码,
在C++上却非常方便。
3.JAVA 在大型工程和安全方面有比较独特的优势,但在ACM 里面却不是一
种优秀的语言,因为JAVA 的执行效率要比C、C++慢很多,而ACM 的题目都对程
序运行时间有限制,如果题目限时比较紧的话,就不适合用JAVA,然而JAVA 却
提供了很方便的高精度运算(大整数运算)。
建议刚学完C 就用纯C 来训练,在训练过程中可以学习C++,有时间再把STL
好好学学。
输入输出:
初次接触ACM 训练时经常会遇到的问题,就是输入和输出问题。如果对语言
的输入输出问题不是很熟悉的话,一定要先重点研究一下,特别在输入和输出时
不能有冗余信息,因为学习语言时可能习惯了使用提示信息来提高程序的交互
性,但ACM 不需要任何交互性。不严格按照题目要求进行输入输出的程序是无法
通过系统测试的。
在线评测系统:
在线评测系统,英文叫Online Judge (简称OJ),是开放的程序自动评判
系统。只要能上网,注册并登录系统后,就可以选择题目,编写程序,提交程序
代码,然后由系统自动进行编译和执行,并通过系统预设测试数据来检验程序代
码的正确性。通过使用OJ 训练,可以提高编程和算法设计能力,随着训练的深
入,可以参加在评测系统上举行的ACM-ICPC 程序设计竞赛。
很多学校都有自己的在线评测系统,里面提供了很多题目给平时学习训练
用。SDUTOJ 是我们学校的在线评测系统。需要先在上面进行注册,注册后就可
以进行题目的训练了。
1
点击主页上的“练习”,就可以看到里面的题库,可以选任何一个题来做,
里面的题目不是由易到难进行排列,而初学者要选择比较简单的题目来做。一般
来讲,每道题目都有正确率Ratio (AC/Submit)——正确次数/提交总次数,那
些正确率比较高并且提交次数比较多的相对就会比较简单。
一旦确定了做某道题,在读懂题意以后,就可以进行构思和编码了,编码完
成后进行程序的调试。一般不直接在OJ 的提交页面输入代码,而是先利用VC6.0
等开发环境进行程序的编译、调试和运行。因为即使编译成功的程序运行也不一
定就正确,要用题目提供的样例输入数据(示例输入Sample Input)进行测试,
如果结果和样例输出数据(示例输出Sample Output)不一致,就要对代码进行
修改,直到能通过所有测试数据。
初学者经常会碰到这样的问题:我的程序运行后对示例输入(Sample Input)
数据得到了对应的示例输出(Sample Output)呀,为什么提交的时候仍然不正
确呢?这是因为OJ 系统中关于这道题目的测试数据远远不止这些,它还有许多
你看不到的测试数据,你的程序必须要能通过它所有的数据,才算是正确的
(Accepted)。如果有能力,需要根据题意自己设计一些测试数据来测试程序,
以便保证提交的正确率。
下面挑出最简单的一个题(SDUTOJ1010)进行讲解:
题目名称下面的“Time Limit:1000MS Memory Limit:60000K”是题目的运
行时间和使用内存限制。
这是一个求两数之和的题目,输入用空格分开的两个数a b,输出a+b 的结
果。编写代码时需要注意的是,本题的输入数据不是只有一对数据,而是多对数
据,每对数据占一行。因为没有指出共有多少对输入数据,于是我们可以编写如
下代码:
2
//C 语言
#include stdio.h
int main() //把main 函数定义成int 类型
{
原创力文档


文档评论(0)