1.文件输入输出(freopen)格式打错
- C++:
#include <iostream>
#include <cstdio>
using namespace std;
int main() {
freopen("ex.in","r",stdin);
freopen("ex.out","w",stdout);
cin >> a >> b;
cout << a+b << endl;
fclose(stdin); //可加可不加
fclose(stdout); //可加可不加
return 0;
}
2.快读快写打错、scanf中没加&
- 快读
#include <cctype>
template <typename T>
inline void read(T &x){
x=0;
char c=0;
T w=0;
while (!isdigit(c)) w|=c=='-',c=getchar();
while (isdigit(c)) x=x*10+(c^48),c=getchar();
if(w) x=-x;
}
- 快写
template <typename T>
inline void write(T x) {
if(x<0) putchar('-'),x=-x;
if(x<10) putchar(x+'0');
else write(x/10),putchar(x%10+'0');
}
scanf("%d%d",&n,&m);
3.调试的语句没有去掉、freopen()前的//
没有去掉
4.输出答案时大小写、格式错误
5.注意存盘、不要关机
为了防止突发事件,至少每20分钟存盘一次 。千万不要关机,否则程序会丢失。
6.变量类型定义错误
char a;
由于习惯写成了: int a;
在Pascal下会报错,在C/C++下不会报错。
7.头文件错误
千万别加<windows.h>
这个头文件,还有<bits\stdc++.h>
最常用的头文件
<iostream>
<cstdio>
<cmath>
<cstring>
<algorithm>
等
较常用头文件:
<cstdlib>
<map>
<vector>
<queue>
<string>
等
8.没加using namespace std;
9.if(a==b)
写成了 if(a=b)
10.变量名定义有误
std与这些变量名有重名:
time
、next
、pipe
等
当然还有y1
、j0
、j1
、jn
、y0
、yn
等
11.变量未初始化
局部变量的初始值是随机的,需要初始化。
12.数据类型问题
应该开long long
时别忘记开。
char a;
由于习惯写成了:int a;
13.命令打错
用命令编译运行的若打了下面这段命令:
g++ ex.cpp -o ex.cpp
将会——代码全没
14.程序运行错误
- 被零除
- 数组越界(数组未开大)
int a[10000][10000];
内存占400MB,溢出
15.#define
错误
#define int long long //没有错,但比较危险
#define MAX(a,b) a > b ? a : b //很可能出错
#define MAX(a,b) (((a)>(b)) ? (a):(b))
#define N 100000+5
int a[N*2]; //开了a[100010]的数组
16.最短路算法
- 有负权的别用dijkstra
- 能用dijkstra就用,万一卡spfa
17.做题顺序的问题
拿到题目先可以先通览一下试卷,看清每道题目的题目名、时间限制、空间限制或者其他试卷中注意的特殊事项。一般都是一题一题做下去,现在的题目一般都比较规范,难度一般是从简答到复杂,所以你的做题顺序一般也是从第一题到第四题。
18.关于读题的问题
读题一定要仔细,对于 1-2 遍就能看懂的题目,千万不要大意,最好再仔细的去读个 2-3 遍,花不了多少时间的。对于题目描述比较复杂的题目,更是要仔仔细细的多看几遍,每一句话都要反复理解。读题的时候要把题目的英文名、题目描述、输入输出文件、输入输出说明、样例输入和输出、数据范围和其他的说明文字,不要以为自己读懂了题目或者会做这个题目而忘乎所以。
19.关于做题
首先你必须设计出这个题目的算法,估计时间和空间复杂度,对于什么时候要用 int 和 long long , 还有数组的范围一定要注意,尤其是边界条件。如果你能想出这题的正确解法,那就按照这个解法做。(100 ~ 0 分)。如果你想不出正确解法,那就可以选择暴力或者搜索。(100 ~ 0 分)。如果你觉得暴力和搜索都有点难的话,可以选择计算特殊情况,然后打表。(50 ~ 0 分)如果你觉得打表都很难的话,你可以猜想测试数据的极端情况和有可能的输出结果(20 ~ 0 分)最后,实在不行,直接输出样例。
20.每道题目做题的一般步骤
1)读懂题目,明确数据范围;
2)根据数据范围思考算法,验证算法
3)考虑算法的边界条件(再次强调一般情况下不要用开大数组来解决你边界出错的问题!!!一定要判断边界)
4)上机编写和调试。
简单的讲:
模拟题目要仔细,搜索暴力要注意边界和时间复杂度,动态规划套模型(背包、最长不下降子序列、石子合并、区间划分等,把限制条件写进状态里面,考虑最后一个和最后一段)、图论题目套模型,不会就直接搜索。
21.考试的应变
当你思路枯竭,不会做题的时候,可以去下厕所 (寻找灵感),但是也不要去的次数太多,一般不超过 3 次。也可以喝口水缓解一下。考试的时候不要被旁边的人影响到,自己认真做题就行。无论你身边坐的是大牛还是大菜,请淡定做题。
22.做题的总体策略
争取前面两题能全对,后面两题分分必争。后面两题如果你实在想不出好的算法,那就请直接暴力或者搜索好了,一般不要轻易放弃暴力或者搜索能得到的分数。其实,后面两题其实也挺简单的。做好的题目一定要多出测试数据(一般需要 10 组左右)来测试自己的程序,尤其是极端数据(一般是小数据,大数据可以算出答案的情况下也要测,注意考虑各种情况)。不要认为过了样例就对了,过了样例只表明你的程序可能不是 0 分了。切记切记!!在同一目录下,要新建每个题目的输入文件,做完每题以后,直接用输入文件进行测试,确保万无一失。
注意:在时间允许的情况下,一定要对拍!
总结
水题不眼瞎
暴力能敲对
表能打一页
狗题会骗分
可在评论区补充。