CSP复赛说明

目录

文档目的

CSP复赛说明

特别说明

考卷

考试要求

特别注意的地方

CSP 复赛样例

数据规模

零分代码

AC代码


文档目的

本文档针对目标是第一次参加 CSP 复赛的同学,主要内容是包括 CSP 复赛提交要求和需要特别注意的地方。由于各省的要求会略微有所不同,本文档主要是依据浙江省的要求写的。

CSP复赛说明

特别说明

本说明暂时只能针对浙江省,据说各省在提交上要求会有些区别。有任何疑问请务必详细咨询监考老师

考卷

下面是 2018 年普及组复赛的文档,请务必注意红色部分。

图1 2018年NOIP普及组复赛

考试要求

在这个文档中,我们可以看到,规定了如下几个:

1、每个题目的名字。

2、必须使用英文小写。

3、main()的类型必须是int。

4、main()的返回值必须是0。

其中,第3和第4条一般99%的人不会出错。比较容易出错的是第1条和第2条,必须严格按照规定。

额外说明:浙江省以前都是windows+devc++,所以可以不看说明中关于NoiLinux部分。

一般来说,浙江省提交的代码会在D盘。假设您的考号为zj01234,考试语言为C++。一般情况下,已经在d盘建立好了zj01234这个子目录。开始情况如下图所示。

根据考试要求,建立4个子目录,子目录的名字参考图1 NOIP 2018年普及组复赛,分别为title、fight、bus、tree。注意全部都是小写。这样目录结构如下图所示。

第一题title的题解文件名为title.cpp,注意全部都是小写。放在对应的d:/zj01234/title目录下。如下图所示。

第二题fight的题解文件名为fight.cpp,注意全部都是小写。放在对应的d:/zj01234/fight目录下。如下图所示。

第三题bus的题解文件名为bus.cpp,注意全部都是小写。放在对应的d:/zj01234/bus目录下。如下图所示。

第四题tree的题解文件名为tree.cpp,注意全部都是小写。放在对应的d:/zj01234/tree目录下。如下图所示。

特别注意的地方

1、比如第一题目录规定为title,你变成Title,如下图所示。

本题就是零分

2、比如第一题规定的提交文件为title.cpp,你写成Title.cpp。本题就是零分

3、比如第一题规定的提交文件为title.cpp,要求放在对应的目录,正确位置为d:/zj01234/title/title.cpp,而你放到了其他地方,如d:/zj01234/bus/title.cpp。本题零分

4、如果有任何疑问,可以直接咨询监考老师。一定要咨询监考老师。

5、和平时OJ练习中最大的不同是,所有题解文件中,都必须使用freopen。用于打开对应的in文件(数据测试文件)和生成out文件(题解文件)。如果题解文件中,没有使用freopen。本题也一定是零分。注意OJ提交的时候,不需要使用freopen重定向。

6、使用freopen()函数的时候,平时使用C++的同学,请务必包含 cstdio 这个头文件,即#include <cstdio>。

7、请务必仔细阅读每个题目,时间是肯定够的。尤其要仔细推敲“数据规模与约定”这个部分。

8、先做有把我的题目,没有把握的最后。也就是先拿能得到的分数。比如有些题目解出部分数据集,也是能拿到部分分数的。

9、复赛无法进行实时测试。CCF只是提供了部分测试数据,需要选手自己构造各种测试数据,对自己的代码正确性进行评估。我们称为对拍。

10、复赛所谓的提交,就是在指定的位置,将对应的cpp文件保存在这里即可。

11、关于万能头。可以使用万能头,即#include <bits/stdc++.h>

CSP 复赛样例

数据规模

下面我们用2018年的第一题title做个简单分析。

从数据规模与约定中可以看到,本题数据长度就是1 ~ 5个字符。

本题的坑点在于,数据中有包含空格

零分代码

参考代码

如果你按照上面的代码提交,恭喜你,你将拿到零分

AC代码

以下才是满分的代码。

 

非常好的问题! > **`#define` 可以在 CSP 复赛中使用吗?** ### ✅ 简短回答: > **可以!`#define` 是 C++ 合法语法,在 CSP 复赛中完全允许使用。** --- ## 🔍 详细说明 ### ✅ 1. `#define` 是标准预处理指令 `#define` 是 C/C++ 的**预处理器宏定义指令**,属于语言标准的一部分,并非竞赛禁用功能。 无论是: - 定义常量:`#define N 1000` - 定义函数式宏:`#define max(a,b) ((a)>(b)?(a):(b))` - 定义类型别名:`#define ll long long` 👉 都是合法、合规的写法,**CSP 复赛评分系统不会因此判错或扣分**。 --- ### ✅ 2. CSP 复赛环境支持情况 根据历年 CSP(信息学奥赛)官方发布的复赛环境说明(通常基于 NOI Linux 或 Windows + Dev-C++/Code::Blocks),支持以下编译器: - **g++(GNU C++)** - 支持 C++11 / C++14 标准 - 支持 `<bits/stdc++.h>`(虽然不推荐) - 支持所有标准预处理指令,包括 `#define` 📌 所以你可以放心使用: ```cpp #define ll long long #define INF 0x3f3f3f3f #define rep(i, a, b) for (int i = (a); i <= (b); i++) ``` 这些在实际比赛中非常常见。 --- ### ⚠️ 但要注意:合理使用,避免滥用 虽然能用,但要警惕以下几点: | 问题 | 示例 | 风险 | |------|------|------| | ❌ 滥用宏导致代码难读 | `#define go(i,x) for(int i=0;i<x;i++)` | 评委/自己看不懂 | | ❌ 不加括号引发优先级错误 | `#define sqr(x) x*x` → `sqr(1+2)=1+2*1+2=5` ❌ | 逻辑错误 | | ❌ 使用保留标识符 | `#define int long long` | 可能干扰标准库 | --- ### ✅ 推荐用法(适合 CSP 复赛) ```cpp #include <bits/stdc++.h> using namespace std; // 类型别名 #define ll long long // 常量定义 #define INF 0x3f3f3f3f #define MOD 1000000007 // 循环简写(可选) #define rep(i, l, r) for (int i = (l); i <= (r); i++) #define per(i, r, l) for (int i = (r); i >= (l); i--) const int N = 100010; ll a[N]; int main() { ios::sync_with_stdio(false); cin.tie(0); int n; cin >> n; rep(i, 1, n) cin >> a[i]; sort(a + 1, a + 1 + n); cout << a[n] - a[1] << '\n'; return 0; } ``` ✅ 这种写法清晰、高效、符合竞赛习惯,也便于快速编码。 --- ### 📝 官方规定参考(NOI 系列赛事通用原则) 根据中国计算机学会(CCF)发布的《NOI 系列赛事技术规定》: > “选手程序应使用标准 C++ 编写,不得使用非法内存访问、系统调用等违规操作。” > —— 未禁止 `#define`,反而鼓励使用合理手段提高效率和可读性。 --- ### ✅ 总结 | 问题 | 回答 | |------|------| | `#define` 能不能在 CSP 复赛用? | ✅ 完全可以 | | 是否会被判为作弊或非法代码? | ❌ 不会 | | 哪些 `#define` 写法推荐? | `#define ll long long`、`#define INF ...`、带括号的函数宏 | | 哪些写法要避免? | `#define int long long`、无括号宏、过于隐晦的缩写 | ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力的老周

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值