Misaka2298的OI零碎知识点 / Tricks
非常之零碎的知识点 / Trick,写题时发现了就随手写下。
搜索与图论
- \(BFS\) 不止可以用来求解无权最短路问题,也可以用来遍历所有的状态,当 \(n\) 的规模过大且判断存状态不会爆栈时,考虑用 \(BFS\) 求解。
- 从初始状态到目标状态的最小代价问题 可以被抽象为最短路问题,依据边权性质选用 \(BFS\),\(Dijkstra\)等算法求解。
- 求解固定边权最短路问题时,优先考虑 \(BFS\) 而非 \(Dijkstra\) ,尽管它可能看起来没那么像 \(BFS\)。
- 并查集可以做很多意想不到的事。
- 链式前向星存图时,
h[u] == -1代表该节点为叶节点。
字符串
std::atoi()(ASCII to int)为 char(char[]) 到 int,std::stoi()(string to int)为 string 到 int()。char[]可以直接用 cin 读入,如果需要右移下标的话可用形如下面的代码。
char c[maxn];
cin >> (c+1);
数学
- \(\left\lceil \frac{n}{m} \right\rceil = \left\lfloor \frac{n-1}{m} \right\rfloor + 1 \quad (n > 0, m > 0)\)
- 多往二进制想!真的是个很好用的东西。
动态规划
动态规划总论
- 思考动态规划问题时可以先一股脑地先把所有状态塞进去,然后再去想有哪些状态是不必要的。
- 动态规划要从集合的角度去考虑,不要直接去想转移。
- 在发现当前思路好像不好转移的时候可以试试改变状态表示形式,如将“使用了i个”变为“还剩余i个”。
杂项
isalpha()判断是否为字母,isalnum()判断是否为数字或字母,isdigit()判断是否为数字,isupper()判断是否为大写字母,islower()判断是否为小写字母。tolower()大写转小写,toupper()反之。

浙公网安备 33010602011771号