之所以将本文标题定为有用的小零碎,是因为在学习过程中发现了很多有用但不成体系的小型知识点,故在本文中列出。
P.S. 因为文章的特殊性,本文会在一段时间内不断更新。
1、考虑到程序运行时间与学习难度,算法竞赛推荐使用“C语言基本语法 + C++的STL”,除此之外的其他内容不作为算法竞赛必修内容。
2、竞赛提交的程序应具备读入—处理—输出数据的功能,除此之外的提示输入、提示输出能字符不能出现。同时,不能让程序“按任意键退出”(就是调用类似 system("pause"); 语句)。
3、在算法竞赛中,必须注意输出格式是否准确,提交前先行调试,同时注意 "\" 的使用。一般来说,每行输出均应以回车符结束,包括最后一行。
4、尽量用 const 关键字来定义常量,如 π 的定义就可写为 const double PI = acos(-1.0);
5、我们写程序的目的是解决问题,不应该一根筋,有时题目描述比较繁琐,但换一个思路实现会非常简单。竞赛时,应保持我们所写程序 Simple and Stupid,而不是去展示我们花哨的编程技巧。例如下题:
输入两个整数 a 和 b ,交换二者的值,然后输出。
有些同学看到这道题,会毫不犹豫地开始定义三变量,也有同学为了展示自己高超的编程技艺,不借助第三变量,利用加减法进行交换。这些虽能达到自己的目的,而且看起来并不繁琐,但竞赛中的题目等级比此要高很多,不符合我们的KISS(Keep It Simple and Stupid)原则。这道题放在竞赛中应该如下实现:
#include <cstdio>
int main() {
int a, b;
scanf("%d %d", &a, &b);
printf("%d %d", b, a);
return 0;
}
写起来简单,看起来也一目了然,实是算法竞赛必用手法。
6、要注意变量名的选取,库函数中通常含有一些常见的变量名,如 round、count、min、max等,尤其是 STL 中,程序中尽量避开它们。
7、在思考和描述算法时可不拘一格地使用伪代码来理清思路。
8、在C语言中,int 型的数值最大为2的31次方减1,大约为21亿,即10位数,故若处理的数据超过了9位数就应该使用 long long 类型,从而避免数据溢出。
9、对于多数据的问题,在计算完一组数据后要记得将标记变量重置,以免影响到下组数据的求解。
10、定义数组时,尽量在 main 函数外定义,以免程序异常退出。
11、直接退出程序可直接使用 return 0;