主要是一些值得一提,但是没必要单独写成一篇的东西
函数 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 ,遇到符号考虑:
- ( :直接丢进 B
- ):弹出 B 的元素并压入 A 直到遇到 ( ,然后弹出该 (
- 运算符(如 +-*/^ ) :弹出 B 中优先级大等于当前运算符的并压入 A ,或直到遇到 ( ,然后向 B 压入当前运算符(即保证 B 栈中运算符自底向上严格递增)
最后弹出 B 中剩余元素并压入 A