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()反之。
posted @ 2025-08-03 18:50  Misaka2298  阅读(13)  评论(0)    收藏  举报