ACM入门
基本输入输出
1.输入输入函数
C++中的标准输入语句是cin,标准输出是cout。
C语言中输入输出函数有:
putchar():把一个字符常量输出到显示器屏幕上;
getchar():从键盘上输入一个字符常量:
printf():把数据按格式控制输出到显示器屏幕上:
scanf():从键盘上输人各类数据:
puts():把一个字符串常量输出到显示器屏幕上:
gets():从键盘上输入一个字符串常量:
sscanf():从一个字符串中提取各类数据。
在竞赛由默认体用标准输入stdin 和标准输出 stdout。
2.输入结束方式
(1)默认结束
“文件结束”(EOF)
while(scanf("%d%d", &a, &b) != EOF){}
while(~scanf("%d%d", &a, &b)){} //竞赛时推荐
(2)在输入数据中指定了数据个数
(3)以特定元素作为结束符
如0;
while(~scanf("%d%d", &a, &b) && n){}
3.输入输出的效率
C++里的输入输出优点是方便,但是效率很低速度很慢。
如果有大量的测试数据,用cin、cout输入和输出慢,可能导致TLE,在这种情况下应该使用scanf()、printf()。
测试
为了操作方便,可以将构造出的输入数据放在文件test.in里,将结果输出到文件test.out里
(1)在程序中加入测试代码
# define mytest
# ifdef mytest
freopen("test.in", "r", stdin)
freopen("test.out", "w", stdout)
#endif
在提交是去掉 # define mytest 即可
(2)在行命令中重定向
例如生成的可执行程序是abc,在Windows或Linux的行命令中这样输入输出到文件:
abc<test.in>test.out
(3) 对比测试数据
对于复杂的,能需要写两个程序:一个是提交到OJ的“好”程序;另一个是暴力法程序,目的是用它成测试数据。这种方法称为”对拍”。
Windows系统下,可以用行命令比较两个程序的输出是否一致。例如在Windows系统下比较它们的输出是否一致
abe.exe<test.in> test1.out
abe_1.exe<test.in> test2.out
fc test1.out test2.out/n
编码
技巧
(1)读题(英文)加大英语阅读量练习
(2)熟练编辑器或IDE(vim和Code:Blocks)
(3)减少调试,尽量使用不容易出错的方法,例如少用指针,使用静态数组,把逻辑功能模块化。不要使用动态调试,不要用单步跟踪和断点等工具,用printf()打印调试信息
(4)使用STL。
(5)编码技巧 如长字符定义成短字符。
typedef long long ll;
ll a=1234567890; // long long a=123456789
规范
(1)header。使用万能开头文件“#include<bits/stdc++.h>”,不要用C语言风格的header。
(2)判断结尾不要用EOF,用‘~’。
(3)换行用K&R风格。
(4)定义变量在调试用的最近的地方。
(5)最好不用宏。不用#define而用const定义常量。