最近偶尔看到群里在讨论明明DevC++下测试可以运行的程序为何CCF测出来是0分呢?
当然原因可能有很多,我们这里仅仅来讨论其中一种情况,那就是因为缺少freopen的头文件而爆0的情况,缺少头文件显然是会CE(Compile Error),连验证程序的正确性的机会都没有。
#include<iostream>
#include<string>
using namespace std;
int main()
{
freopen("number.in","r",stdin);
freopen("number.out","w",stdout);
string s;
long long ans=0;
cin>>s;
for(int i=0;i<s.size();i++)
{
if(s[i]=='1')ans++;
}
cout<<ans;
return 0;
}
这是从浙江赛区CSP-J选手中,随机找的因为这个原因爆0的程序(oitiku.com上测试也是CE,相信大家已经深深感受到了NOIP信息网估分的强大,打CALL)
CE的原因是缺少头文件,为何DevC++能编译通过呢?我们尝试了不同版本的G++在Linux下进行程序编译,发现G++4.8.4版本编译会缺少头文件而编译过不去,但是4.9.2以及更高的版本编译是过的去。另外我们也应该注意到到DevCpp的编译选项那边编译会帮我们自动连接了很多include文件。
的确考试时候的工具可以通过编译,到了评测就CE,而且还是g++版本的问题,的确会让人不爽。有兴趣的老师可以尝试更高版本的g++,根据CCF提供的终端运行命令行尝试对爆0同学程序的编译。
在g++ 4.8.4版本下对于freopen,可以使用的头文件有#include <bits/stdc++.h>, #include <cstdio>,#include <stdio.h>,#include<fstream>
#include <bits/stdc++.h> “万能头文件”,一劳永逸,基本上竞赛所要使用的大部分库都被囊括其中,以前我们是这样的:
#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include