C++经验:做题技巧、思路
小编原创,想看更多可关注小编。
目录
1.做题技巧
- 要输入输出时,为了节省时间,可以用C语言的输入输出,即 scanf 和 printf ,当然在不了解的情况下可以用C++语言的输入输出,即cin和cout。
- 当存储数据大于20亿左右时,要用long long来存储数据(不要用int,int会出问题)
- 纯是字符串可以用puts();来输出(要引入#include<cstdio>),如puts("O(∩_∩)O");
- 定义数组时尽量设为全局数组,这样会自动将数组全赋值为0。
- 若a要×或÷ 2^n可用位运算:a>>n;a<<n;
- 定义数组时要比题目定的数据大一些,这样可防止测试程序数据出现误差。
- 有些要运用数学的东西,一些不用手写,#include<cmath>和#include<algorithm>里面或许有你要用的数学函数,读者可以自己搜哦~
- 当遇到有t组数据时:while (t--){……}
2.做题思路
- 枚举法(时间复杂度较低时可用)
- 深度优先搜索(并剪枝,这样可以提高效率,当然可以加上记忆化搜索)
- 广度优先搜索(即宽度优先搜索)(并剪枝,这样可以提高效率,当然可以加上记忆化搜索)
- 贪心算法(要考虑是否能用贪心算法,许多题目看起来能用实际上用了是错的)
- 二进制枚举子集(题目要求内存得够)
- 动态规划(这可够难的了)
- 查找算法(可用于查找某东西,建议用二分查找法)
- 排序算法(有些题得将数据排序,建议用sort()函数,需#include<algorithm>,有时得自己写)
- 使用C++专门的STL(即queue、set、map、vector之类的)
- 高精度算法(数据太大时可用)
- 用数学知识(如三角形的内角和是180°)
- 图的算法(还有各种技巧,如连通块有n个点,n-1条边)
- 多开动脑筋(如某题对的人数有n人,只需要将总人数-错的人数即可求出n)
小编原创,想看更多可关注小编。