CSP-JS第二轮新手避坑指南

梁老师
梁老师 北京小升初老师~

0 人点赞了该文章 · 50 浏览





(一)
文件输入输出

每年都有一些选手,尤其是第一次参加第二轮的选手,因为文件输入输出语句没写或没写对,遗憾爆0。

文件输入输出有多种方式,最简单的是freopen。假如题目的标题是candy,则只需要加入这两行:

freopen(“candy.in”, “r”, stdin);

freopen(“candy.out”, “w”, stdout);

注意,这里的函数名称和参数不能写错,任意一个地方出错都会导致程序爆0。比如,candy.in不能写成candy.txt,也不能写成candy.in.txt。“r”不能写成“read”,也不能写成’r’(这种情况编译器会报错),

两行freopen中的三个参数,是分别相反的,in文件对应着out文件,读取对应着写入,标准输入对应着标准输出。下面三种常见的错误写法,都会爆0。

第一种:

freopen(“candy.in”, “r”, stdin);

freopen(“candy.out”, “r”, stdout);

第二种:

freopen(“candy.in”, “r”, stdout);

freopen(“candy.out”, “w”, stdout);

第三种:

freopen(“candy.in”, “r”, stdin);

freopen(“candy.in”, “w”, stdout);


另外,新手建议不要在程序的末尾写fclose函数。因为程序结束后,所占的内存就都释放了,fclose函数写不写是一样的。新手写的越多,意味着犯错的可能性越大。


(二)程序提交格式

不同省份的提交格式可能不尽相同,常见的有两种。

第一种,在电脑桌面建立以准考号命名的文件夹,然后把源代码提交到该文件夹内。假如四道题的标题分别是candy, sort, network, fruit,假如只会前两题,那么提交前两道题就可以了。这两题的文件名应该命名为candy.cpp和sort.cpp。提交样式如下图所示:

图片

如果你是用codeblocks建立的项目,那么每个项目源代码的名称都是main.cpp。可把main.cpp拷贝到准考证命名的文件夹内,然后把main.cpp重命名成相应的名称比如candy.cpp

若采用这种提交方式,不需要提交多余的文件,比如.in文件,.out文件,.exe文件。.in和.out文件用来帮助选手测试, exe是运行结果文件。如果把这些文件都提交了,也不会影响分数,因为评分时这些文件会被忽略掉。

下面这种方式是错误的,会爆0。因为多建了一层文件夹:

图片


第二种方式,是在浏览器中打开一个网址,然后把代码直接复制粘贴到网址里面,再点击底部的“提交”按钮即可。这种方式程序文件名称无所谓(比如codeblocks项目下的程序文件名叫main.cpp),只需要把代码直接复制粘贴到网址里即可。NOI Online测试、各大OJ网站比如洛谷、以及这两年北京的第二轮,都是采用这种方式。


(三)NOILinux建立项目的位置

如果你用的是NOILinux系统,那么不要把C++项目项目建立在桌面,因为“桌面”这两个字是汉字,会导致无法编译。

图片


可建立在Linux账户的家目录(即桌面的上一级目录)中,这样就不会影响编译。

图片


(四)NOILinux建立.in文件

.in文件需要手动创建,.out文件则不需要手动创建,因为运行程序后会自动生成。

Windows系统中创建.in文件比较简单,右键点击空白处,选择新建文本文件即可。

NOILinux系统与Windows系统差别较大,在NOILinux系统中,右键点击空白处无法创建文本文件。可用下面三种方式来创建。

第一种,运行代码后,会生成xxx.out文件比如candy.out,然后把candy.out在同一目录下复制粘贴,会生成candy(复件).out,将candy(复件).out重命名为candy.in

第二种,点击桌面左下角的“九个点”按钮,在弹出的界面中的第一页选择“文本编辑器”,注意文件要保存到程序项目的路径下。

图片

第三种,在终端里进入程序项目所在的路径,然后用touch candy.ingedit candy.in的指令来创建candy.in文件。

推荐新手使用最简单的第一种。


(五)文件名都是小写

根据历年csp-js/noip相关的比赛来看,输入文件名、输出文件名、以及源代码的文件名称都是小写的。


(六)Windows系统的扩展名要显示出来

有些Windows系统的电脑的扩展名是隐藏的,一定要让扩展名显示出来。否则轻则影响测试,重则爆0。比如有些机器隐藏了扩展名,选手将程序命名为candy.cpp,实际上是candy.cpp.cpp;选手将输入文件命名为candy.in,实际上是candy.in.txt


(七)输出格式

如果题目要求数据之间加空格,那就不能换行输出。比如要求输出

1 2 3

如果选手输出

1

2

3

则不能得分。


大小写也要注意,需要仔细看清题目是要求全大写、全小写还是首字母大写。比如要求输出Yes,则输出YESyes、yES等均不能得分。


(八)可多次提交代码

每做出一题,提交一题。每题写出一版代码,先提交上去,后面如果有更好的方法写完再次提交,会把先前提交的代码覆盖掉,以最后一次提交为准。

不要把所有的代码等到最后一次性提交,这样可以避免遇到突发情况来不及提交。

每写若干行代码,可保存一次。这样可以避免因为意外情况比如死机重启导致写好的代码丢失。


(九)头文件

包含常用的头文件,比如iostream,cstdio, algorithm,或者直接包含万能头文件bits/stdc++.h


(十)变量名冲突

用了using namespace std;之后容易产生的问题是,有些自己的变量名比如time、next和std命名空间的变量名冲突,而且在Windows下编译器不报错,但是在Linux下报错。所以如果需要这几个单词,可以使用首字母大写Time、Next或者做一下变形如tim、nxt或者定义成局部变量。另外time、next等作为结构体的成员名是没问题的。

全局变量不要使用y0、y1yn、j0、j1、jn。因为这些变量名称在C++11标准库里被定义了,不能用作全局变量,否则编译会有警告或出错。但是这些变量可以用作局部变量。

图片


(十一)变量初始化

变量的初始化常见有两种方式:输入和赋值。在使用变量之前记得要初始化。如果定义成全局变量,则系统会自动初始化。


(十二)数组建议用全局数组

全局数组可用的内存空间比局部数组可用的内存空间大很多很多。


(十三)注意时间和空间限制

1秒内最大循环次数不要超过1亿次。1亿次有可能超时也有可能不超时。但是一两千万次通常不会超时。

通常题目会限制内存不能超过256兆或512兆。所以要学会估计内存。比如全局数组int a[1000000]占内存100 0000 * 4 / (1024 * 1024) 兆 ≈ 4兆。

图片


添加 家长论坛微信 



发布于 2024-04-14 15:11

免责声明:

本文由 梁老师 原创发布于 家长帮 ,著作权归作者所有。

登录一下,更多精彩内容等你发现,贡献精彩回答,参与评论互动

登录! 还没有账号?去注册

暂无评论

广告
All Rights Reserved Powered BY WeCenter V4.1.0 © 2025 京ICP备20005761号-2