UVA 10655 - Contemplation! Algebra
题目链接
题意:给定p, q, n代表p=a+b,q=ab求an+bn
思路:矩阵快速幂,公式变换一下得到(an+bn)(a+b)=an+1+bn+1+ab(an?1+bn?1),移项一下得到an+1+bn+1=(an+bn)p?q(an?1+bn?1)
这样就可以用矩阵快速幂求解了
代码:
...
分类:
其他好文 时间:
2014-07-20 23:36:03
阅读次数:
300
nth_element
------------------------------------------------------------------------------
描述:重新排序,使得[nth,last)内没有任何一个元素小于[first,nth)内的元素,
但对于[first,nth)和[nth,last)两个子区间内的元素次序则无任何保证。
思路:
1.以 median-of-3-partition 将整个序列分割为更小的左、右子序列
2.如果 nth 迭代器落于左序列,就再对左子...
分类:
其他好文 时间:
2014-07-20 23:20:34
阅读次数:
279
汉诺塔
汉诺塔II hdu1207:
先说汉若塔I(经典汉若塔问题),有三塔,A塔从小到大从上至下放有N个盘子,现在要搬到目标C上,
规则小的必需放在大的上面,每次搬一个,求最小步数。这个问题简单,DP:a[n]=a[n-1]+1+a[n-1],先把
上面的n-1个放在B上,把最大的放在目标C上,再把N-1个放回到C上即可。
网上的一种最优解法如下:(1)将x(1
#inc...
分类:
其他好文 时间:
2014-07-20 23:18:31
阅读次数:
272
找循环节求lcm就够了,若答案是12345应该输出1,被坑了下。
#include
#include
#include
#include
#include
#include
using namespace std;
#define INF 0x3FFFFFF
#define MAXN 2222
#define eps 1e-6
int a[MAXN],p[MAXN],b[MAXN],vis[MA...
分类:
其他好文 时间:
2014-07-20 23:12:48
阅读次数:
309
random_shuffle
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
描述:将[first,last)的元素次序随机重排。
思路:
必须是 RandomAccessIterator
1.遍历区间
2.产生[...
分类:
其他好文 时间:
2014-07-20 23:12:29
阅读次数:
231
pre_permutation
----------------------------------------------------------------
描述: 取得 [first, last) 所标示之序列的前一个排列组合。如果没有,返回 false,有,返回true
思路:
从后往前
1.找两个相邻元素,令左端的元素为*i,右端的元素为*ii,且满足 *i > *ii
2.找出第一个小于 *i 的元素,令其为 *j,将*i,*j元素对调
3.将ii右端的所有元素颠倒
template <cl...
分类:
其他好文 时间:
2014-07-20 23:07:55
阅读次数:
286
UVA 11149 - Power of Matrix
题目链接
题意:给定一个n*n的矩阵A和k,求∑kiAi
思路:利用倍增去搞,∑kiAi=(1+Ak/2)∑k/2iAi,不断二分即可
代码:
#include
#include
const int N = 45;
int n, k;
struct mat {
int v[N][N];
mat() ...
分类:
其他好文 时间:
2014-07-20 23:07:20
阅读次数:
274
equal_range(应用于有序区间)
--------------------------------------------------------------------------------------------------------------------------------------
描述:利用二分查找找到一个区间,区间里的所有值都等于给定值,返回的是一个pair,
分别存储区间的上界迭代器和下界迭代器
源码:
template <class ForwardIterator, c...
分类:
其他好文 时间:
2014-07-20 23:06:36
阅读次数:
263
merge sort
----------------------------------------------------------------------
描述:归并排序
思路:
1.将区间对半分割
2.对左、右段分别排序
3.利用inplace_merge将左、右段合并成为一个完整的有序序列
复杂度:O(log n)
源码:
template
void mergesort(BidirectionalIter first, Bidirecti...
分类:
其他好文 时间:
2014-07-20 23:05:52
阅读次数:
245
如下图:
这里我们实现DFS中的三种遍历方法。
相关的如下:
相关算法的介绍不再赘述。
首先对于preorder traversal 的步骤为:
其他两种算法略。
具体递归调用分析, 注意学会画stack frame的图分析。 这里不再赘述。
代码如下:
/* Binary Tree Traversal - Preorder, Inorder, Postor...
分类:
编程语言 时间:
2014-07-20 23:05:10
阅读次数:
365