上一页 1 ··· 7 8 9 10 11 12 下一页
摘要: 1.Fibonacci Number0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377, 610 …Formula:2.Lucas Number1, 3, 4, 7, 11, 18, 29, 47, 76, 123...Formula:3.Catalan Number1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786,208012…Formula:Application:1) 将 n + 2 边形沿弦切割成 n个三角形的不同切割数2) n + 1个数相乘, 给每两个元素加上括号的不同方法 阅读全文
posted @ 2011-12-31 13:04 windmissing 阅读(194) 评论(0) 推荐(0) 编辑
摘要: /* 还是暴力打表,然后规律 递推公式: a[n]=4*a[n-1]+5(n为奇数) a[n]=4*a[n-2]+5(n为偶数) 结果: ans=2*4^n-5*(4^n-1)/3(n为奇数) ans=2*4^n-4*(4^n-1)/3(n为偶数) 这里由于涉及到除法取余,所以还要把3的逆元求出来 */ #include<stdio.h> #include<stdlib.h> #define mod 10007 //非递归方法求p^b __int64 power(__int64 p,__int64 b) { __int64 sq=1; while(b... 阅读全文
posted @ 2011-12-31 13:03 windmissing 阅读(172) 评论(0) 推荐(0) 编辑
摘要: //很祼的并查集 #include "UnionFindSet.h" #include <iostream> using namespace std; int main() { UFS ufs; int P, X, Y; char ch; cin>>P; while(P--) { cin>>ch; if(ch == 'M') { cin>>X>>Y; ufs.Union(X,Y,-1); } else { cin>>X; ufs.Find(X); cout<<ufs.dept 阅读全文
posted @ 2011-12-30 15:53 windmissing 阅读(83) 评论(0) 推荐(0) 编辑
摘要: /* UnionFindSet.h 并查集,非递归方法,含路径压缩,数组从0开始 合并时,前者合并入后者,不区分大小 */ #include <iostream> using namespace std; #define MAXN 30005 class UFS { public: int n; int father[MAXN+1];//集合根结点 int rank[MAXN+1]; //集合中点的个数 int depth[MAXN+1]; //每个结点改变一次所属的集合,增加一些值 public: UFS(int size = MAXN); vo... 阅读全文
posted @ 2011-12-30 15:51 windmissing 阅读(138) 评论(0) 推荐(0) 编辑
摘要: //很纯的二维树状数组 #include "TreeArray.h" #include <iostream> using namespace std; int main() { bool flag[MAX][MAX]; TreeArray ta(2); int m,x1,x2,y1,y2; char op; while(scanf("%d",&m)!=EOF) { memset(flag, 0, sizeof(flag)); ta.clear(); while(m--) { getchar(); scanf("%c" 阅读全文
posted @ 2011-12-30 13:50 windmissing 阅读(164) 评论(0) 推荐(0) 编辑
摘要: /* TreeArray.h 树状数组,一维和二维都有。数组必须从1开始 问题: 已知数组a[],元素个数为n,现在更改a中的元素,要求得新的a数组中i到j区间内的和 解决方法: 从图中不难发现,c[k]存储的实际上是从k开始向前数k的二进制表示中右边第一个1所代表的数字 个元素的和(这么说可能有点拗口,令lowbit为k的二进制表示中右边第一个1所代表的数字,然后 c[k]里存的就是从a[k]开始向前数lowbit个元素之和) C1 = A1 C2 = A1 + A2 C3 = A3 C4 = A1 + A2 + A3 + A4 C5 = A5 C6 = A5 + A6 C7 = A7 .. 阅读全文
posted @ 2011-12-30 13:45 windmissing 阅读(105) 评论(0) 推荐(0) 编辑
摘要: /* 取下前n个环步骤是先取下前n-2个环,再取下第n个环,再还原前n-2个环,最后取下前n-1个环。 递推公式:f(n) = f(n-1) + 2 * f(n-2) + 1 构造矩阵: Fn(1,3) = |f(n) f(n-1) 1| F2(1,3) = |f(2) f(1) 1| = |2 1 1| |1 1 0| A(3,3) = |2 0 0| |1 0 1| Fn = F2 * A^(n-2) */ #include "Mat.h" #include <iostream> using namespace std; int a[3][3] = {... 阅读全文
posted @ 2011-12-30 11:27 windmissing 阅读(147) 评论(0) 推荐(0) 编辑
摘要: /* 两个数论公式: f(k) = ( (1+sqrt(5)) / 2 ) ^ k - ( (1-sqrt(5)) / 2) ^ k (1+a)^n = Sum(C(k|n) * (a^k)) 推导过程: Sum(C(k|n) * f(k)) = Sum(C(k|n) * ( (1+sqrt(5)) / 2 ) ^ k - ( (1-sqrt(5)) / 2) ^ k) = Sum(C(k|n) * (1+sqrt(5)) / 2 ) ^ k) - Sum(C(k|n) * (1-sqrt(5)) / 2 ) ^ k) = ( (3+sqrt(5)) / 2 ) ^ k - ( (3-sq.. 阅读全文
posted @ 2011-12-30 11:06 windmissing 阅读(97) 评论(0) 推荐(0) 编辑
摘要: /* s[i][j]表示i秒钟后第j个灯的情况 s[i][j] = (s[i-1][j] + s[i-1][j-1]) % 2; 令 Fn(1,len) = |s[i][0] s[i][1] …… s[i][len]| F0(1,len)为输入状态 A(len len) = |1 1 | | 1 1 | | …… | |1 1| Fn = F0 * A ^ n 这题中模板会超时,要把模板中Multiply()的%放到()外面才可以 */ #include "Mat.h" #include <iostream> usin... 阅读全文
posted @ 2011-12-29 21:02 windmissing 阅读(96) 评论(0) 推荐(0) 编辑
摘要: /* 由f(n)=f(n-1)+f(n-2)构造矩阵 令 Fn(1,2) = |f(n) f(n-1)| A(2 2) = |1 1| |1 0| F1(1 2) = |1 0| Fn = F(n-1) * A = F1 * A ^ (n-1) 代入n = g(i) = k * i + b 得:Fn = F1 * A ^ (k * i + b - 1) 1)b > 1 Fn = F1 * A^(b-1) * (A^k)^i Sum(Fn) = F1 * A^(b-1) * Sum((A^k)^i) 2)b = 1 Fn = F1 * (A^k)^i Sum(Fn) = F1 * Sum( 阅读全文
posted @ 2011-12-29 20:24 windmissing 阅读(92) 评论(0) 推荐(0) 编辑
上一页 1 ··· 7 8 9 10 11 12 下一页