#A. A+B Problem(NOI系列比赛必做题)

    传统题 文件IO:myfile 1000ms 256MiB

A+B Problem(NOI系列比赛必做题)

该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。

题目背景

一般信奥赛有两种输入输出方式来提交代码,一种叫“标准输入输出”方式,一种叫“文件输入输出”方式。

那么这两种输入输出方式的区别是什么呢?

简单点理解就是:

我们平时上课练习时候在bcoi题库中练习题目,一般都是以标准输入输出方式来提交代码的,但是在CSP-J/S 以及 NOI 系列赛事基本都是以文件输入输出的方式提交代码。

这种赛事提交方式,其实也很简单,只需要在 main 函数开头加入下面两行这样格式的代码即可(两种方式的区别仅此而已)。

freopen("题目英文名.in", "r", stdin);
freopen("题目英文名.out", "w", stdout);

如果一场赛事要求说以文件输入输出方式提交代码,那么题目都会给出每道题目的英文题名称,那么你的代码在提交的时候只需要用比赛提供的题目英文名替换掉上述"题目英文名"几个字,然后加入到代码中保存提交即可。(试卷样例见下图2024年CSP-J试卷pdf版中的要求)

如果是在bcoi上,题目要求以文件输入输出方式提交代码,那么会在题目的标题下方出现:”文件IO:myfile“字样,其中的myfile就是该题目的"题目英文名"


题目描述

注意:本题和CSP NOIP考试一样,必须以文件读写的方式,进行提交代码测试

给定两个整数 AB,输出 A+B 的值。保证 A,B 及结果均在 32 位整型范围内。

输入格式

一行,包含两个整数 A,B,中间用单个空格隔开。AB 均在32 位整型范围内。

输出格式

一个整数,即 A+B 的值。保证结果在 32 位整型范围内。

样例数据 1

输入数据 1

1 2

输出数据 1

3

本题文件读写代码模板

#include <bits/stdc++.h>//采用万能头文件
using namespace std;
int a,b;
int main(){
	freopen("myfile.in","r",stdin);//以文件形式读取数据,注意文件名按照试卷要求
	freopen("myfile.out","w",stdout);//输出结果到myfile.out文件内,注意文件名按照试卷要求
  
	//代码正文部分
	cin>>a>>b;
	cout<<a+b;

	return 0;//这行一定要有
}


NOI系列赛事代码保存说明

在CSP或者NOIP等比赛中会提供pdf版或者纸质版试卷,在试卷中会明确标明每道题目的英文名称:试卷样例见下图

赛事要求C++代码保存名为:*****.cpp

CSP考试时候,代码保存到考试要求的文件夹内(具体咨询当场监考老师,一般是准考证号为名字的文件夹内,文件名一定要和试卷要求的同名,包括大小写,文件扩展名cpp等;

输入输出方式要求以文件读写形式代替标准输入输出。

注意:输入输出文件名的字母,一定要和试卷要求的一模一样,包括大小写,文件扩展名等;


关于时间和空间限制要求的说明

一般每题都会注明不同的时间要求:

例如以<=1000ms为例,那么大约循环次数在10710^7以内,为安全时间

空间要求以<=256M为例:

(以int数据类型为例: N=256×1024×1024/46×107N=256\times1024\times1024/4\approx6\times10^7,

上述N表示假如256M空间全部用来存储int类型数据,那么只能存储N个int类型的数据或者

一维数组最大定义到 int array[N]

二维数组最大定义到 int array[a][b];其中a*b<=N;)


通用模板A(输入输出数据量小于10000的时候适用):

#include <bits/stdc++.h>//采用万能头文件
using namespace std;
int a,b;  //一般情况可将变量定义成全局变量,这样定义时候都自动初始化为0,但要注意全局变量改变后对全局的影响;
int array[1000005];//数组基本上都定义在全局变量区域,因为定义在主函数中数组太大时候容易爆;
int main(){
	freopen("myfile.in","r",stdin);//以文件形式读取数据,注意文件名按照试卷要求
	freopen("myfile.out","w",stdout);//输出结果到myfile.out文件内,注意文件名按照试卷要求


      
	//代码正文部分
	cin>>a>>b;
	cout<<a+b;


	return 0;//这行一定要有
}

★快读模版代码B:(输入输出数据量比较大的时候推荐使用这种方式)

#include <bits/stdc++.h>//采用万能头文件
#define endl "\n"//输出需要换行的话以"\n"代替endl,会加快输出速度 
using namespace std;

int a,b;  //一般情况可将变量定义成全局变量,这样定义时候都自动初始化为0,但要注意全局变量改变后对全局的影响;
int array[1000005];//数组基本上都定义在全局变量区域,因为定义在主函数中数组太大时候容易爆;

int main(){
	freopen("myfile.in","r",stdin);//以文件形式读取数据,,注意文件名按照试卷要求
	freopen("myfile.out","w",stdout);//输出结果到myfile.out文件内,,注意文件名按照试卷要求


    //输入输出文件名的字母,一定要和试卷要求的一模一样(注意大小写也要一致);
    //代码保存到考试要求的文件夹(一般是准考证号为名字的文件夹内,文件名一定要和试卷要求的同名
	
	//关闭cin,cout和scanf,printf 的同步,关闭后可以加快输入输出速度,但是后者就不允许混用了 
	ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);//通过tie(0)(0表示NULL)来解除cin与cout的绑定,进一步加快执行效率
    
    //程序代码正文部分: 
    
	cin>>a>>b;
	cout<<a+b<<endl;
	
	
	
	
	return 0;//这行必须有,否则可能爆零分; 
}

快读模版代码C:(老一代OIer用这种方式,呵呵......)

#include <bits/stdc++.h>//采用万能头文件
using namespace std;
int a,b;  //一般情况可将变量定义成全局变量,这样定义时候都自动初始化为0,但要注意全局变量改变后对全局的影响;
int array[1000005];//数组基本上都定义在全局变量区域,因为定义在主函数中数组太大时候容易爆;
int main(){
	freopen("myfile.in","r",stdin);//以文件形式读取数据
	freopen("myfile.out","w",stdout);//输出结果到myfile.out文件内。
        //输入输出文件名的字母,一定要和试卷要求的一模一样;
        //代码保存到考试要求的文件夹(一般是准考证号为名字的文件夹内,文件名一定要和试卷要求的同名


	//代码正文部分
	scanf("%d%d",&a,&b);
	printf("%d",a+b);


	return 0;//这行一定要有
}

快读模版代码D:(虽然快,但没必要)

手写快读相对比以上的输入方法要快速,但代码比较繁琐,现在的竞赛中越来越偏向于侧重考察思维能力和算法能力,对于这种卡输入输出的要求越来越少了,所以一般也不常用。

#include <bits/stdc++.h>
#define endl "\n"
using namespace std;

int a,b;  
int array[1000005];

//手写快读函数 
inline int read(){
    register int x = 0, t = 1;
    register char ch=getchar(); // 读入单个字符到寄存器
    while(ch<'0'||ch>'9'){
        if(ch=='-')
            t=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9'){
        x=(x<<1)+(x<<3)+(ch^48);  // 移位与异或
      	// 第十行可以换成 x = x * 10 + ch - '0'
        ch=getchar();
    }
    return x*t;
}

//手写快写函数 
inline void write(int x)
{
    if(x<0){
    	putchar('-');
		x=-x;
	}
    if(x>9) 
		write(x/10);
    putchar(x%10+'0');
}
int main(){
	freopen("myfile.in","r",stdin);
	freopen("myfile.out","w",stdout);
	ios::sync_with_stdio(false);
        cin.tie(0); cout.tie(0);
    
   
   //程序代码正文部分: 
    
	a=read();
	b=read();//cin>>a>>b;
	write(a+b);//cout<<a+b<<endl;
	cout<<endl;	
	
	
	
	return 0; 
}

模板选择说明

当输入输出数据不大时候(1000以内)采用模板A,简单方便,输入输出数据比较多(10000次以上)采用模板BCD之一。

模板B注意添加关闭同步语句(反正死记硬背记住模板就好了),然后就可以按照正常的C++输入输出cin cout来写代码,可以使用STL 的string等。这种输入方式是在IO之前将stdio解除绑定,但是这样做了之后要注意不要同时混用cout和printf之类。

模板C使用C语言的scanf和printf输入输出,该方法遇到字符输入的时候要注意格式问题,往往很容易出错,也不能使用string类等

模板D虽然速度是最快的,但是由于比较繁琐,目前的竞赛基本上很少去卡这个时间了,所以万一考试时候写错了某个部分,反而得不偿失了。

模板B和C根据个人喜好选择,但是cin cout scanf printf尽量不要混用。

最后的最后,不要管上面的那些罗里吧嗦的文字了,只要记住以下这段去掉注释后的固定模板B代码(把“myfile”改成试卷上题目要求的文件名,其他部分记住照搬就好了):

#include <bits/stdc++.h>
#define endl "\n"
using namespace std;

int a,b;  
int array[1000005];

int main(){
	freopen("myfile.in","r",stdin);
	freopen("myfile.out","w",stdout);
	ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    
   
   //程序代码正文部分: 
    
	cin>>a>>b;
	cout<<a+b<<endl;
	
	
	
	
	return 0; 
}

1025csp模拟

未参加
状态
已结束
规则
IOI
题目
2
开始于
2024-10-25 18:30
结束于
2024-10-27 20:30
持续时间
50 小时
主持人
参赛人数
31