ACM竞赛备战资料精选ACMICPC校内赛讲座一些初学者必须要知道的问题.ppt

ACM竞赛备战资料精选ACMICPC校内赛讲座一些初学者必须要知道的问题.ppt

  1. 1、本文档共32页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ACM竞赛备战资料精选ACMICPC校内赛讲座一些初学者必须要知道的问题

2007 UESTC ACM/ICPC校内赛讲座 一些初学者必须要知道的问题 刘歆 a.k.a. liux0229, Tom Riddle liux0229@ 该ppt可从数学学院网站 下载,无需做记录 1.如何用C/C++处理输入输出 2.复杂度和程序优化 3.初学者如何进行修炼 1.如何用C/C++进行输入输出 相对次要的问题,但成为很多初学者的拦路虎 C/C++(尤其是C)输入输出方法较复杂,需要一定时间实践才能精通 我的任务:通过实例提供处理各种输入输出任务的方法,并讲解一些原则性的问题,同学们可以举一反三 首先,几个基本概念 什么是标准输入、标准输出? 标准输入(stdin):键盘(scanf, cin) 标准输出(stdout):屏幕(printf, cout) 建议程序中只使用stdin和stdout 要打开文件怎么办? freopen(“input.txt”, “r”, stdin); freopen(“output.txt”, “w”, stdout); ACM/ICPC中基本上都是要求从键盘输入,屏幕输出 是人工评测? 否,测试前程序被做了重定向,就向上面一样,只不过重定向是外部的 比如,Linux Shell下 $ ./prog input output $ diff output answer 所以,严格按照题目描述来进行输入输出,不要打印任何题目未做要求的信息 ACM/ICPC的输入输出特点:流式、ASCII 顺序输入、输出,避免使用文件定位函数(如:fseek) 不需要把所有的输出放在一处进行,随时都可以输出,只要顺序是对的,因为只有当你的程序终止了,与正确答案的比较才会开始 字符格式,12345是5个字符‘1’,’2’,’3’,’4’,’5’构成 所以,C中只能使用处理ACSII文件的输入输出函数(getchar,putchar,scanf,printf,gets,fgets,puts) 使用C++进行输入输出 cin,cout 优点 数据类型自识别,使用简单 缺点 速度慢! ACM/ICPC的测试数据规模非常大,cin/cout在这种情况下会成为性能瓶颈,引发超时 除非输入规模小,否则不推荐使用cin! 输出规模相对较小,在某些情况下使用cout会很方便,但是cout控制输出格式不如printf灵活 一个重要的误区 不要在一个程序中同时使用cin和C输入函数(如:scanf) 也不要同时使用cout和C输出函数(如:printf) 但是,可以C输入函数和cout搭配使用,反之亦然 违反以上原则可能导致输入/输出结果错误(会发生乱序)! 推荐使用C函数进行输入输出 输出:printf(putchar,puts),其用法请查阅相关书籍,比较简单,不做重点讲解 每一行输出完后要打印回车’\n’,包括最后一行 输入:scanf, fgets(gets), getchar scanf 输入格式 %d %lld %c %s %lf 对每种格式搞清楚一个重要问题 是否自动跳过前导空白? 什么是空白:空格,TAB,回车 %d %lld %lf自动扫描前导空格 比如:读入5个整数到A[5] 输入文件中,数的排布是这个样子 35 26 78 99 206 不管它,直接5次%d for ( int i = 0; i 5; i++ ) scanf(“%d”, A + i); %lld用于输入和输出长整数(long long,64位) %lf用于输入输出double %s 读一个字符串,自动扫描前导空白,读到空白结束 如: abcd efgh,将读出”abcd” %c读一个字符,但是不扫描前导空白 如何读一个非空白字符呢? 比如,读取某人的信息,其性别用M/F表示 Nathan M Flying Claire F Self-healing 名字和能力用%s读,性别怎么办,自己扫描空格?麻烦! 读一个非空白字符,方法一 char str[2]; scanf(“%1s”, str); // %s扫描前导空白,并且只读一个字符 char c = str[0]; 方法二 强制扫描空白 在%前面加上一个空格表示“强制扫描前导空白” scanf(“ %c”, ch); 前面那个读人物信息的完整scanf语句: scanf(“%s %c %s”, name, gender, ability); 同理,格式后面加一空格表示“读完这个变量后扫描空白”,注意空白是包括回车的 读一行:gets, fgets gets会导致很讨厌的warning message,所以可改用fgets fgets(str, sizeof str, stdin

文档评论(0)

zhuwenmeijiale + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:7065136142000003

1亿VIP精品文档

相关文档