0101a^b
快速幂模板,写一下快速幂的原理。
我们知道,一个数\(n\)在二进制(也可以是其他进制)下可以被表示为\(a_1+a_2*2^1+a_3*2^2+...+a_m*2^{m-1}\)。那么我们可以考虑将其分拆成二进制状态下的每一位,然后做幂运算。这样做的时间复杂度为\(O(log_2 n)\)。
实现的过程类似于倒过来的分治(当然也可以直接分治实现),原理基于以下的式子。
对于k为偶数,\(n^k=(n^2)^{k/2}\)。
对于k为奇数,\(n^k=n*(n^2)^{(k-1)/2}\)
0102 64位整数乘法
本质上和上一道题一样,注意数据范围即可。
0103 最短Hamilton路径
状压DP。
\(f[i][j]\)表示在经过的点状态为i,当前位置在j上路径长度的最小值。
枚举中转点进行转移即可。
0301 递归实现指数型枚举
dfs,在每个状态都输出一下。
0302 递归/非递归实现组合型枚举
dfs,限制结束长度。
0303 递归实现排列型枚举
dfs。
0304 IncDec Sequence
运用差分数列性质的妙题。
众所周知,差分就是前缀和的逆运算,当相邻两个元素相同的时候,差分数列里对应的一项会变为0,
当我们将某一个区间加上或减去1的时候,差分数列里只有两项变化,所以这就是个结论题了。
统计差分序列里正数之和与负数之和的绝对值(不包括第一项),取最大值就是第一个答案,差的绝对值+1就是第二个答案。
原文地址:https://www.cnblogs.com/ilverene/p/11142206.html
时间: 2024-10-07 14:03:43