【CSP复赛代码规范 】爆0率60%
■ 比赛时可以使用万能头文件 #include<bits/stdc++.h>
■ 比赛采用文件判题方式,需要加上文件输入输出流freopen()
#include<bits/stdc++.h>
using namespace std;
int main(){
freopen( "文件名.后缀","r",stdin );
freopen( "文件名.后缀","w",stdout );
/*
解决问题的代码
*/
fclose( stdin );
fclose(
stdout );
return 0;
}
■ 为了防止数据溢出,整数变量均建议使用long long 类型,如果需要大量使用,可以给long
long 类型起一个别名ll,使代码更简洁。
建议使用:typedef
long long ll;
不建议使用:#define ll
long long
■ 定义全局变量,看清题目最后的数据范围要求,比如 :0 <= n <=
10^5,可以有一下定义方式:
const
int N = 1e5 + 5;
int
a[N], b[N];
int
n, m;
■ 程序的return 0;必须要,否则爆0
■ 全局变量不要使用y0、y1、yn、j0、j1、jn。因为这些变量名称在C++11标准库里被定义了,不能再用作全局变量,否则编译会有警告或出错。但是这些变量可以用作局部变量。
■ 局部变量一定要初始化,尤其是累加计算时
■ 最后提交代码时删除调试语句
■ 输出规范,注意大小写,注意是否有空格和换行,注意是否结果取模,不要漏掉
■ 程序禁止使用内嵌汇编和以下划线开头的库函数,比如__gcd()
■ 不要用float,使用double,默认的小数类型是double
■ long long类型输入输出时,使用%lld格式化控制符
■ 输入输出数量很大时,使用scanf和printf读写,比用cin/cout读写要快
■注意定时保存文件
为了防止突发事件,至少20分钟存盘一次。千万不要关机,否则程序会丢失。
■注意头文件及命名空间
头文件太多时,容易忘写using
namespace std;
但是用了using
namespace std;
之后容易产生的问题是:自己的变量名和std命名空间的变量名冲突,而且在Windows下编译器不报错,在Linux下报错。所以自己的变量名不要使用hash、x0、x1、y0、y1,time、next、pipe等。
如果需要这几个单词,可以用Time、Next等个字母大写或者加上一些字母,如mytime、mynext等,或者定义成局部变量。
■注意变量初始化
变量、数组在使用之前忘了初始化,里面的值是随机的,结果就会出问题,所以使用的时候不要忘记初始化,可以定义成全局变量,系统会自动初始化。
■数据类型
注意数据类型,输入输出的时候占位符和数据类型要一致,不一致在有时候可能结果也没有错误,但是评测的时候可能就有问题,比如long
long的数据类型不能用“%d”,而应该用“%lld”。
■注意字符串读入方式
由于gets函数会造成安全隐患,在C++中已经被弃用,所以注意不要使用gets函数。
可以使用:fgets\getchar\scanf\std::cin或其他读入方式。
■数组
C++里数组有时候可能会出现莫名其妙的问题,所以一定要记得把数组开大点,并且赋初值。
最好是开成全局变量,因为在main函数里定义的是局部变量,给你的空间会比较小,二维数组很容易就爆了。
还有要注意千万不要数组越界,以下用代码说明:
//比如题目要求n个数,
n的范围为0 <= n <= 10000, 很多同学喜欢用下面的方式
int
n;
cin
>> n;
int
a[n+5];
但这是一个错误的定义方式,直接会导致数组越界。因为在编译阶段就会开辟数组的空间,然而在这个时候n并没有输入值,所以会导致n的值随机,开辟一个随机的大小,很容易导致数组越界。
以下是正确的定义方式:
//0
<= n <= 10000
const
int N = 1e4 + 5;
int
a[N]
//或者
int
a[10005];
■时间空间资源和精度
1000毫秒内较大循环次数不要超过10^8(10^8有点悬,10^7不超时)。
空间限制在128MB时,数组元素类型为int时,元素个数较多别(约3*10^7),要定义在到main函数外面的全局变量区(二维数组的两个维度大小要相乘)。
■数据范围
有的题目,多个数相加,每个数的较大值就到了1e9,那么存放和的变量就必须是long
long。有的题目,边权的较大值都到了1e9,并且更新较短路径时两个边权相加,结果就是2e9。
那么我们在为数组元素赋值为无穷大时,应该设多少呢?
我们的无穷大可以是1e9+1,或者0x3f3f3f3f
=十进制1061109567
0x7f7f7f7f
= 十进制2139062143
int的范围是
- 2147483648 ~ 2147483647 。
所以程序中的无穷大可以定义为1e9+1或0x3f3f3f3f。
■注意图的建立
建立图的邻接矩阵和邻接表时,注意单向边和双向边,重边,自环等情况。
👉其它注意事项
■ 考试时不要踢到电源导致关机
■ 使用虚拟机NOI Linux系统时不要随意退出虚拟机全屏
■ 放松心态,专心答题,不被别人键盘声干扰影响
■ 考试不要作弊,不仅全网通报批评,还会禁赛三年,得不偿失!