随笔分类 -  读书笔记

Trie--字典树
摘要:第九届中山大学校赛预选赛(2006)Problem A 信息泛滥大致题意:给出 n 个不同的字符串,再给出 m 个字符串,问这 m 个字符串中在给出的 n 个串中没有出现的个数。思路:建 Trie ,统计即可。----------------------------------------------------------# include <stdio.h>struct tree{ tree *node[26]; int bj; tree() { bj = 0; for (int i = 0; i < 26; ++i) n... 阅读全文

posted @ 2012-07-11 01:43 getgoing 阅读(168) 评论(0) 推荐(0)

卡特兰数
摘要:(摘自维基百科)卡塔兰数维基百科,自由的百科全书卡塔兰数是组合数学中一个常在各种计数问题中出现的数列。以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名。卡塔兰数的一般项公式为 前几项为 (OEIS中的数列A000108): 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190, 6564120420, 24466267020, 91482563640, 阅读全文

posted @ 2012-07-08 10:52 getgoing 阅读(1491) 评论(0) 推荐(1)

[笔记-柔性字符串匹配]Shift-And与Shift-Or
摘要:Shift-And 和 KMP一样都是基于前缀搜索的方法,复杂度为O(n);《柔性字符串匹配》: "只有当模式串小于8时,KMP才比基于后缀和基于子串的搜索方法有效。而在这个范围内,Shift-And算法和Shift-Or算法能够在所有机器上运行,速度至少是Knuth-Morris-Pratt的两倍,并且更易于实现。"Shift-And对字母表中的每个字符构造一个位序列,根据下面的公式更新匹配状态D:D = ((D<<1) | 0^{m-1}1) & B[t_{i+1}];B[t_{i+1}]是字符t_{i+1}的位序列,当D的第j位为1并且t_{i+1 阅读全文

posted @ 2012-04-27 13:11 getgoing 阅读(773) 评论(0) 推荐(0)

[背包九讲笔记] UVa 674 Coin Change
摘要:看了背包九讲,感觉写得很好,很清楚,很容易看懂(虽然有很多句子不通顺的地方)。这道题虽然看上去上不是背包,但和完全背包的考虑方法有很相似。完全背包的状态转移方程: f[i, v] = max(f[i-1,v], f[i][v-c[i]]+w[i]);使用一维数组,有: f[v] = max(f[v], f[v-c[i]+w[i]), v = c[i]...Vmax;这道题f[i,v]有类似的意义:使用前 i 种硬币恰好组成面值v的方法总数,这样f[i,v] 包含了只使用前 i-1 种硬币组成面值v的方法种数,另外也包含了使用前 i 种硬币组成面值 v-c[i] 的方法种数,所以状态转... 阅读全文

posted @ 2012-04-03 18:14 getgoing 阅读(1591) 评论(0) 推荐(0)

poj 3070 Fibonacci
摘要:先计算幂乘表,根据输入n的二进制位判断是否乘该位相应的幂;以前做过类似的,但是当时递推矩阵不一样,这次拜读了Ozy的大作,自己敲了一遍;运行时间: 0ms,神奇吧! 1 /* poj 3070 */ 2 3 # include <stdio.h> 4 5 # define MAXN 30 6 # define MOD 10000 7 8 short int power[MAXN][4] = {{1,1,1,0}}; 9 short int ans[4];10 11 void mul(short int *a, short int *b, short int *c);12 13 in 阅读全文

posted @ 2012-03-25 14:37 getgoing 阅读(339) 评论(0) 推荐(0)

poj 1061 青蛙的约会
摘要:求线性同余方程的最小非负解;gcd(a,n)=d;若d|b则有d个解,分布在[0,n-1]上,周期为n/d,所以取[0,n/d-1]上的即可(取模)。/* 谁让你试int型,WA活该 */ 1 # include <stdio.h> 2 3 long long int d, xx, yy; 4 5 long long int extended_euclid(long long int a, long long int b) 6 { 7 long long int t; 8 if (!b) d = a, xx = 1, yy = 0; 9 else 10 {1... 阅读全文

posted @ 2012-03-23 18:11 getgoing 阅读(256) 评论(0) 推荐(0)

Product:java高精度乘法
摘要:还是 java 简单! 1 import java.io.*; 2 import java.math.*; 3 import java.util.*; 4 public class Main 5 { 6 public static void main(String[] args) 7 { 8 BigDecimal a,b; 9 Scanner cin=new Scanner(System.in);10 while(cin.hasNextBigDecimal())11 {12 a=cin.ne... 阅读全文

posted @ 2012-03-17 12:48 getgoing 阅读(1117) 评论(0) 推荐(0)

华丽的大数类,华丽的AC:Integer Inquiry
摘要:参考《算法竞赛入门经典》(刘汝佳)中大数类的实现,终于 AC 了;使用大数类写着感觉很轻松,AC 得也很轻松。。不过还没找到 C 代码 WA 的原因。 1 /* UVa 424 - Integer Inquiry */ 2 # include <iostream> 3 # include <string> 4 # include <cstring> 5 # include <algorithm> 6 7 using namespace std; 8 9 const int maxn = 105;10 11 struct bign{12 int l 阅读全文

posted @ 2012-03-17 00:09 getgoing 阅读(251) 评论(1) 推荐(0)

内置类型开方
摘要:迭代公式:x[n+1] = x[n] + {a/x^(k-1)-x[n]}/k发现BUG,谢谢联系!函数sqrtn() 中,参数x是被开方数, k是开方次数,x0是迭代初值,n是迭代次数;pow() 使用的应该不是迭代法。 1 # include <stdio.h> 2 # include <math.h> 3 4 long double sqrtn(double x, int k, double x0, int n); 5 6 int main() 7 { 8 int k, n; 9 double A, x0;10 11 while (~scanf("%l. 阅读全文

posted @ 2012-03-13 21:31 getgoing 阅读(205) 评论(0) 推荐(0)

最长回文子串
摘要:看了刘汝佳的白书,才发觉最长回文子串不是那么难,关键是将思路转化为代码;之前看到一种通过在两个元素之间加入分隔符的方法,将奇偶情况统一起来,其实并没有减少运算量,感觉没直接的好,虽然代码长点,但是思路清晰;另外学习了如何使用 fgets() 以及为什么不推荐使用 gets() 。# include <stdio.h># include <string.h> # include <ctype.h># define MAXN 1000char ch[MAXN], s[MAXN];int main(){ int len, i, j, max, sta, end; 阅读全文

posted @ 2012-03-12 21:09 getgoing 阅读(293) 评论(0) 推荐(0)

csu 1242 碱基配对——一个错误的解答
摘要:早上刚看了如何用 dp 解决LCS,想到了这道题,无奈这道题和LCS不同,还要求对应位置匹配。还是遇到了一个小问题:序列是从1开始的,但是数组的下标是从0开始的,于是想到了gets(a+1)这样的方法,这时要对a[0]赋以非 0 初值/* csu 1242 错误:非LCS问题*/# include <stdio.h># include <string.h># define MAXN 1002char a[MAXN], b[MAXN];short c[MAXN][MAXN];short int solve(void){ short ans, m, n, i, j, tmp 阅读全文

posted @ 2012-03-09 12:54 getgoing 阅读(341) 评论(0) 推荐(0)

约瑟夫环问题(基本)
摘要:n个人围成圈,依次编号为1,2,..,n,现在从1号开始依次报数,当报到m时,报m的人退出,下一个人重新从1报起,循环下去,问最后剩下那个人的编号是多少?递归法参见百度百科:Josephus(约瑟夫)问题的数学方法递推式: 将这些人的编号用对总人数取模所得余数代替(即原编号减一),其中 Fn 表示n个人的环,最后剩下的那个人的编号。由这个递推式不难写出相应代码:/* 约瑟夫环问题 */# include <stdio.h>int main(){ int m, n, i, s; while (~scanf("%d%d", &m, &n)) { s 阅读全文

posted @ 2012-03-05 19:11 getgoing 阅读(3878) 评论(0) 推荐(0)

导航