一, 文件读写
无论是 CSP ,还是 NOIP ,参加复赛的选手都需要使用文件读写,而在复赛中因为文件读写写错或忘写而爆零的示例也并不少见。
文件读写模版:
freopen("XXX.in","r",stdin);
freopen("XXX.out","w",stdout);
其中, “XXX” 代表题目中会给定的文件名,直接填写便是。
注意,文件读写必须放在主函数大括号的最顶端,形如:
#include<iostream>
using namespace std;
int main()
{
freopen("XXX.in","r",stdin);
freopen("XXX.out","w",stdout);
return 0;
}
到底一道题要不要使用文件读写,还是要看题目有没有给定文件读写所需要的文件名,当然,有些复赛也不需要文件读写。
如北京今年举办的 BCSP-X 的复赛,在复赛举办的前几天取消了需要 文件读写 的规定,让选手将代码直接提交在网站上。
二,数据范围
1,数据大小
C++ 界,有一句很有名的话:十年OI一场空,不开 long long 见祖宗 。
有很多题目 ,都会产生数据超过 int 类型极限的情况,那时,如果还使用 int 类型,就会失去分数,乃至爆零。
对于大多数题目, long long 类型已经足够了,但如果数据达到了 2^{70} ,或者 2^{80} 呢? long long 也不行了,这时就需要请出 __int128 类型了。__int128 的极限达到了 2^{127}-1 ,这个大小,对数字来说,已经非常巨大了。
但是, __int128 需要特殊的输入与输出,被称为 快读快写 ,有点麻烦。
所以,对于所有题目,直接开 long long 或者 __int128 就够了吗,不是的,这跟空间大小有关。
2,空间
一般情况下,一道题目的空间限制为 256MB 或 512MB ,超过题目的空间限制会导致 MLE(内存超限)
所以,无脑的使用 long long 也是不正确的。
3,时间
一道题的时间限制和数据范围决定了这道题需要了怎样的算法,如 O(log n) 的二分, O(n) 的前缀和, O(n log n) 的最长上升子序列。
如果使用的算法不够快速,将导致 TLE(时间超限)
三,骗分
在比赛中,骗分是一种技术活,骗的好,能拿到二等或者三等 也说不定(反正我是没见过只靠骗分拿到一等的)。
但到底怎么骗呢,我这个蒟蒻也说不来,还是建议大家去看看别的博客。
最后,祝大家都能 RP++,祝大家都有光明的未来!