主要是一些值得一提,但是没必要单独写成一篇的东西

函数 next_permutation (库 algorithm )。令限定下标范围内排列成字典序次大的排列。

int A[6]={0, 1, 4, 5, 2, 3};
char S[6] = {'i', 'a', 'm', 'z', 'y', 'h'};
do {
	for (int i=1; i<=N; i++) printf("%d ", A[i]); puts("");
} while (next_permutation(A+1, A+N+1));
do {
	printf("%s\n", S);
} while (next_permutation(S, S+3));

另外还有 prev_permutation

中缀表达式转后缀表达式

luoguP1175 表达式的转换
用两个栈 A, B 维护,A 存放最终答案
扫一遍表达式,遇到数字丢进 A ,遇到符号考虑:

  1. ( :直接丢进 B
  2. ):弹出 B 的元素并压入 A 直到遇到 ( ,然后弹出该 (
  3. 运算符(如 +-*/^ ) :弹出 B 中优先级大等于当前运算符的并压入 A ,或直到遇到 ( ,然后向 B 压入当前运算符(即保证 B 栈中运算符自底向上严格递增)

最后弹出 B 中剩余元素并压入 A