- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
貌似新人们总会遇到几个问题,提一下吧。1. 64Bit整型的问题2. 大数组RE的问题3. cin/cout的TLE危险4. scanf的\n遗留问题以及gets的RE问题5. 精度问题6. 其它还有一些建议--1. 64Bit整型的问题这个东西比较纠结阿。一般来说在VC下面,定义的时候要用__int64用g++/gcc的时候,则应该用long long定义在Windows下面,输入输出的时候要用%I64d这个格式在类Unix(包括Solaris/Linux等)下面,输入输出的时候要用%lld这个格式对于各类OJ,不妨自己在A+B这道题上试试参加比赛的时候,务必向工作人员或者judge问清楚编译环境——包括操作系统和编译器。2. 大数组RE的问题emingCup的时候就有队伍遇到这个问题自己运行的时候都RE还交过来。这个涉及到编译器对不同类型变量的内存分配规则。在C/C++中对于在函数内定义的变量(包括main()函数)都是在程序的栈空间内分配的(这个空间相对有限)如果定义一个内存使用量达到MB级别的数组一般就会Stack Overflow,RE了。所以遇到大数组的时候建议大家都定义成全局变量这样就可以在编译的时候就为它们分配好足够的空间。更具体的可以参见luoxi同学的这篇日志。 HYPERLINK /luoxi0209/blog/item/50364c39b1c2622597ddd8b0.html \t _blank /luoxi0209/blog/item/50364c39b1c2622597ddd8b0.html 另外,想起snoopy大牛的建议,如果你的算法递归稍会微深一点,那就考虑优化,或者写非递归的吧。3. cin/cout的TLE危险C++中cin/cout这两个预定义好的变量内部都有个缓冲区对于实际使用是非常有好处的但是不适合用来做acm:它们常常会导致TLE原因大概是没有及时把它们的缓冲区输出吧。特别要注意的是不止cin/cout其它所有的C++流都可能有缓冲区所以做题目的时候,特别是有大量I/O的题目尽量使用scanf和printf (它们的格式化输出功能非常好)。对于字符串,string确实很好用,但是只能用cin输入必要的时候,变通的方法是定义一个比较大的char数组,scanf到这个数组,然后再赋给stringchar a[1024];string b;scanf(%s, a);b = string(a);输出的时候就:printf(%s, b.c_str());4. scanf的\n遗留问题以及gets的RE问题有些题目的输入格式很BT阿scanf默认用空白字符(包括空格,tab,回车,换行)作为分隔符在输入完一个数据以后,接下来的空白符不会被处理会继续留在系统的输入缓冲区(特别是\n)所以如果这个时候要输入一个字符,很可能的就是输入的是\n这时候可以用一个getchar()来处理这个\n。有时候需要读入完整的一行,因为scanf的默认分隔符问题所以有时候需要换个读入方式而gets的RE问题是这样的gets遇到\n或者EOF才会结束所以可能就会导致数组越界错误因此尽量不要使用,推荐使用scanf(%1024[^\n], a)或者 fgets(a, 1024, stdin);限制输入的字符数。5. 精度问题对于float/double的比较,通常可能会有舍入误差(比如0.1这个东西在IEEE754标准下永远不可能精确存储)导致本来应该相等的不相等,所以建议这样先定义一个常量,比如精度在10^-9这个额度(要根据具体问题判断这个额度!)#define EPS (1e-9)然后用这样一个比较函数:int cmpDouble(double a, double b){????if(fabs(a - b) EPS) return 0; // a == b????else if(a - b 0) return 1; // a b????else return -1; // a b}对于float/double的取整也很有技巧:floor和ceil不一定能给你你想要的结果(why?)对于一个double类型的a,想想这些表达式的意义:(提示:取(?)整,四舍五入)(int)(a + EPS)(int)(a + EPS + 0.5)以上对于正数成立,对于负数呢?最好还是自己想想,嗯。其它还有一些建议,比如~ 定义数组的时候开大些??比如题目告诉最多5000个数据,那就开到5010或者更多一些吧~ 不要太依赖vc的调试功
您可能关注的文档
最近下载
- 2025人音版音乐一年级下册第三单元《鸭子拌嘴》聆听表格式教案.pdf VIP
- 康复医院介绍课件PPT.pptx
- IPG激光器 使用手册YLR-1500-U-K+.pdf VIP
- 2025年老年教育课程设置与情感化教学模式创新研究报告.docx VIP
- 2024《学前教育法》解读PPT课件.pptx
- 外研版(2024)七年级上册英语Unit 6 教案教学设计.docx VIP
- DELTA台达-精巧标准型矢量控制变频器MS300系列使用手册-操作说明书.pdf
- 中国女性私密健康行业白皮书:她有千钧力,亦有万万相.pptx VIP
- DLT 499-2024 低压电力技术规程.doc
- 数字信号处理及其MATLAB实现——慕课版(孙晓艳)课后习题答案解析.pdf
文档评论(0)