好好学习《算法竞赛入门到进阶》 第一章-算法竞赛概述

目录

 

一、方法竞赛概述(省略)

二、创新能力的培养(省略)

三、训练平台(省略)

四、入门知识

1、判题的基本输入与输出

2、输入与输出函数C

3、输入结束方式

4、输入与输出的效率

5、测试

五、模板的作用

六、题目分类(省略)

七、代码规范


一、方法竞赛概述(省略)

二、创新能力的培养(省略)

三、训练平台(省略)

四、入门知识

1、判题的基本输入与输出

OJ运行用户提交程序后可得到一下结果之一:

  • 没有超时,并且完全一致Accept(AC)
  • 超时Time Limit Exceeded(TLE)。
  • 结果时对的,但是格式有错误,例如多了空格,返回Presentation Error(PE)
  • 结果时错的,或者时其他问题,返回WA、RE、MLE等。

2、输入与输出函数C

C++中的标准输入语句为cin,输出语句为cout。

C语言中的输入与输出函数如下:

  • putchar():把一个字符常量输出到显示器上;
  • getchar():从键盘上输入一个字符常量;
  • puts():把一个字符串常量输出到显示器上;
  • gets(): 从键盘上输入一个字符串常量;
  • sscanf():从一个字符串中提取各类型数据;

在竞赛中,默认使用标准输入stdin 输出stdout,如果用到文件的输入和输出,会特别说明使用方法。

3、输入结束方式

(1)默认结束。在OJ上一般有多组测试数据,如果没有明确指出输入在什么时候结束,则以”文件结束“(EOF)为结束标志。

例如:

int main(){
	int a, b;
	while(~scanf("%d %d, &a, &b")){ // 在竞赛时不建议写成while(scanf("%d %d", &a, &b) != EOF)
		...
	}
	return 0;
}

(2)在输入数据中指定了数据个数。

(3)以特定的元素做结束符。例如以 0 作为结束符。

while(~scanf("%d", &n) && n)

4、输入与输出的效率

在c++中,输入和输出通常是用 cin,cout,优点是方便。

但与 scanf()、printf()相比,cin、cout的效率很低,速度很慢。

5、测试

在程序编好之后,应给自己先测试通过,再提交到系统。输入的数据除了随机生成以外,还要手工生成一些,主要是一些边界值,特别大的值和特别小的值。

为方便操还,可以把构造出的输入数据放在文件 test.in 中,将输出的结果放在 test.out 中。

可以在程序中加入测试代码:

#define mytest
#ifdef mytest
	freopen("test.in", "r", stdin);
	freopen("test.out", "w", stdout);
#endif

在提交时去掉 #define mytest 即可。

多使用编程的小技巧。例如把长的字符串重新定义为段字符串。

typedef long long ll;

五、模板的作用

使用模板对提高编码速度很有帮助。

六、题目分类(省略)

七、代码规范

  1. 尽可能使用万能头文件。
  2. 输入判断结尾不要用EOF,而用 ’~‘。
  3. 换行。用K&R格
  4. 变量定义在这个变量被调用的最近的地方。
  5. 最好不要用宏。不要用 #define 定义常量,而用 const。

 

你可能感兴趣的:(算法竞赛入门到进阶)