金九银十日,复赛进行时。 CSP-J/S复赛马上就要开始了,但是每年都有很多孩子因为一些不起眼的失误导致一年的努力付之东流。下面为大家准备了一些复赛的注意事项,避免踩坑。
第二轮比赛与我们平时在OJ上做题形式不同,需要我们将文件放入规定的目录,然后汇总提交,由系统统一评测后得到分数。那么应该在哪里写代码呢?
一般情况下,主办方会在计算机的E盘(或者D盘)根目录下建立以考生准考证编号命名的文件夹,考生应检查该文件夹名称是否正确(包括编号及大小写字母)。如有错误须立即上报监考人员,由监考人员进行更改。
确认无误后,考生须为每道试题再单独建立一个子文件夹,子文件夹名与对应的试题英文名相同(参见试题封面页)。考生提交的每道试题的源程序(.cpp文件)也必须按照对应的试题命名,分别存放在其子文件夹下。
下面以CSP-J/S 2021 第二轮认证 入门组为例,山东考生张三,准考证号SD-1001,试题封面页如下:
以下演示以Windows环境为主,个别省份使用的是NOI Linux,操作基本类似。
SD-1001考生的答题目录如下:
每道题的源程序要放在对应的子文件夹下:
.cpp
文件)必须使用英文小写,确定拼写正确.cpp
文件)即可,其它文件可以删除。除了答题方式不同,考试还要求每道题从指定的文件输入数据,并将结果保存到指定输出的文件中。以上要求可以通过重定向输入输出来完成,方法如下。
在主函数的开头加入下面两行代码:
freopen("输入文件名", "r", stdin);
freopen("输出文件名", "w", stdout);
输入文件名和输出文件名在试题封面页可以找到。以candy
这个题为例,其输入文件名为candy.in
,输出文件名为candy.out
。
下面是实现代码:
#include
using namespace std;
int main()
{
//将标准输入输出重定向到文件中,注意文件名都是小写,不能有多余的空格
freopen("candy.in", "r", stdin);
freopen("candy.out", "w", stdout);
int n, L, R;
cin >> n >> L >> R;
if(L / n != R / n) cout << n - 1;
else cout << R % n;
return 0;
}
加了freopen
后,就不能像之前一样在控制台输入数据测试程序了。测试代码可以这样操作:
candy.in
(注意扩展名)candy.out
文件,用记事本打开,检查输出结果。当然,也可以先注释掉这两行代码,等程序测试无误以后再去掉注释。一定要记得去掉注释!!!
long long
或写高精度。(十年OI一场空,不开long long
见祖宗)int
为4字节,long long
、double
为8字节,数组大小要在
3
×
1
0
6
3\times10^6
3×106以内。也不要数组太小,小心RE
。j-w[i]
时需要确实其大于等于0。next
、Y1
和y1
作为变量名(同理还有hash
、time
、pipe
、yn
、j0
、j1
、jn
),会导致CE
。另外不要使用gets
函数(C++14已经移除,用getline
替代)。scanf
读取变量不要忘记加地址符。-std=c++14
priority_queue
(默认大顶堆),哈希表unordered_map
,不要拼错。double
的比较需要使用fabs
,不能直接==
。例如:#include
#include // 绝对值函数头文件
using namespace std;
int main()
{
const double eps = 1e-8; // 限定误差范围
double a = 10.0 / 3;
double b = 3.333333333333 ;
if (fabs(a - b) <= eps) cout << "a和b相等" << endl;
else cout << "a和b不相等" << endl;
return 0;
}