【C++】信息学联赛机试常见错误和注意事项

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与这些变量名有重名:
timenextpipe
当然还有y1j0j1jny0yn

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 分了。切记切记!!在同一目录下,要新建每个题目的输入文件,做完每题以后,直接用输入文件进行测试,确保万无一失。
注意:在时间允许的情况下,一定要对拍

总结

水题不眼瞎
暴力能敲对
表能打一页
狗题会骗分

可在评论区补充。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值