【CSP复赛代码规范 】爆0率60%

admin 2025-07-27 15:03:20


【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系统时不要随意退出虚拟机全屏

放松心态,专心答题,不被别人键盘声干扰影响

考试不要作弊,不仅全网通报批评,还会禁赛三年,得不偿失!