自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(35)
  • 资源 (10)
  • 收藏
  • 关注

原创 POJ 3740 Easy Finding(舞蹈链)

/*舞蹈链模板题*/#include #include const int mMax = 50, nMax = 500;int map[mMax][nMax];int M, N;struct Node{ int left, right, up, down; int col;}node[mMax * nMax];//双向链表int len;int cnt[nMax];

2012-08-30 22:50:23 693

原创 HDU 4260 The End of The World(汉罗塔)

/*汉罗塔问题,要用到一个公式:假设N个盘子都在A上,那么搬到B上则需要2^N - 1次。dfs(B, pos)的作用是:将前面pos个盘子全部搬到B上所需要多少次。这样,dfs(B, pos) = dfs(C, pos - 1) + pow(2.0, pos - 1) - 1 + 1;即,先将pos - 1个盘子都放在C处,然后将最后剩余一个盘子放在B上,再将C上面的盘子都放回B处。d

2012-08-25 19:43:36 2901

原创 HDU 1251 统计难题(很基础的Trie)

/*一道很基础的Trie树的问题过了,不过200ms,使用静态数组实现可能效果更好一些*/#include #include #include #include using namespace std;const int SonNum = 27;int T, N;struct Trie{ Trie *next[SonNum]; int num; Trie() {

2012-08-23 23:05:46 555

原创 POJ 3461 Oulipo(KMP求匹配次数)

/*题意:求某一单词在句子中出现的次数。做这道题的时候,匹配算法搞了很久,最后终于想明白了,受传统模式匹配算法的影响,认为①处也需要对i做一次变化。*/#include #include #include using namespace std;const int wMax = 10010;const int tMax = 1000010;char s[wMax], ss[

2012-08-23 22:22:22 670

原创 HDU 3746 Cyclic Nacklace(KMP求最小循环元)

/*题意:组成一个环,要求至少包含两个相同字符串,求至少向给出字符串后面添加的字符数题解:根据KMP求出循环元,最小循环元t = len - next[len]。然后问题就很容易解决了。做完这道题,感触更深一些了,这个公式对任何字符串都适用。*/#include using namespace std;const int nMax = 100010;int T;char s[

2012-08-23 22:16:43 2144 1

原创 HDU 1754 I Hate It(线段树)

/*标准的线段树模板*/#include using namespace std;const int nMax = 200010;struct Node{ int l, r; int max; Node(){} Node(int l, int r, int max):l(l), r(r), max(max){}}node[nMax * 4];int A[nMax];i

2012-08-22 22:20:37 572

原创 hdu 1556 Color the ball(线段树的另一种应用)

/*线段树这道题做完以后,收获很大,学到了线段树的另一种应用:如果需要对某个区间内所有元素进行同样操作,则只需要对线段树上对应区间进行操作即可。统计每个气球被涂次数,只需要匹配到线段树的对应的区间即可,不需要统计到叶子节点。否则会超时,在最后统计结果的时候则需要搜索到叶子节点。即:①处的作用*/#include using namespace std;const int nM

2012-08-22 22:08:15 889 1

原创 A new common sub-strings problem(后缀数组,求第K小公共子串)

A new common sub-strings problemTime Limit:1000MS  Memory Limit:65536KTotal Submit:7 Accepted:2Description一个字符串中一段连续的若干个字符称作这个字符串的“子串”,如果一个字符串同时是另外两个字符串的子串,就称这个字符串是另外两个字符串的“公共子串”。 现在GBQC国的

2012-08-22 19:06:32 1630

原创 POJ 1743 Musical Theme(后缀数组,最长重复子串)

/*题意:用数字代表音节,寻找最长主旋律,要求:不少于五个数字,不能重复;并不要求两段子串完全相同,相加同一个数字后相同也可以题解:我原来把字符串相加一个数字后做了一次拼接,结果超时。其实这道题,更好的解法是,另建一个数组存储前后数据之差,这样如果,存在主旋律,则这段字符串必然相等。然后问题就可以解决了。不过需要注意,最后结果需要加1这道题做了很久,最后AC,收获很大,①到④是曾经出现

2012-08-20 22:29:48 597

原创 Consecutive-digit Number

Consecutive-digit NumberTime Limit:1000MS  Memory Limit:65536KTotal Submit:38 Accepted:13 DescriptionRecently Ginger found that there are many numbers, digits of whom can be rearranged to a

2012-08-20 19:55:25 853

原创 Zigzag Matrix(模拟)

Zigzag MatrixTime Limit:1000MS  Memory Limit:655360KTotal Submit:33 Accepted:17 DescriptionProduce a zig-zag array. A zig-zag array is a square arrangement of the first N*M integers, where the

2012-08-20 19:51:56 697

原创 HDU 1421 搬寝室

/*状态转移方程:d[i][j] = min(d[i][j - 1], d[i - 1][j - 2] + (A[j] - A[j - 1]) * (A[j] - A[j - 1]))d[i][j]:表示前j个物品搬运i次最小的疲劳度*/#include #include using namespace std;const int nMax = 2002;const int I

2012-08-18 19:50:16 571

原创 HDU 1081 To The Max(最大子矩阵)

/*题意:求子矩阵的最大和题解:这一类型的题,关键在压缩,将矩阵压缩为一维数组,然后转变为求最大字段和*/#include using namespace std;const int nMax = 107;const int INF = 0x7fffffff;//int d[nMax][nMax][nMax];int N;int map[nMax][nMax];int s

2012-08-18 19:23:15 786

原创 POJ 1035 Spell checker(哈希表)

/*题意:输入字典,然后输入单词,判断字典中是否出现过该单词,或者是否进行删除、添加、替换操作,如果是,则输出对应的字典中的单词要求按照输入时候的排名输出题解:建立两个哈希表。一个存储字典和输入字典中单词的排名,一个进行最后输出的判重*/#include //#define using namespace std;const int HASH = 12007;char lis

2012-08-18 10:16:13 1077

原创 HDU 1258 Sum It Up(哈希表判重)

判重哈希表解决:#include using namespace std;const int nMax = 15;const int INF = 10007;int t, n;int A[nMax];int flag;int hash[INF][15];int head[INF];//int head[], next[];//int ans[nMax];//int l

2012-08-17 09:22:33 608

原创 STL学习之路

一、二分查找:lower_bound(v, v + n, a):返回大于等于a的第一个元素的下标,如果所有元素都小于a,则返回nuppere_bound(v, v + n, a):返回小于等于a的最后一个元素的下一个下标,如果所有元素都大于a,则返回0需要注意的是函数的返回值是指针形式,需要转换为对应的下标,减去数组首地址即可。二、优先队列:priority_queue q

2012-08-16 23:16:36 482

原创 ACM成长之路

一、字符串KMP、最小表示法、AC自动机、字典树(Trie树)、后缀数组二、数据结构单调队列、优先队列(堆)、线段树、哈希表三、搜索数组存储“路径”、BFS建层次图、奇偶剪枝四、图论最小生成树(Prim)、最短路径(Prim、dijskra)、二分匹配、匈牙利算法、最大流(EK、Dinic、ISAP)、欧拉回路、拓扑排序、五、数论素数、Fic、

2012-08-16 23:10:21 966 1

原创 HDU 1010 Tempter of the Bone(奇偶剪枝)

/*题意:从S到D,能否在T时刻到达主要使用奇偶剪枝主要收获:①奇偶剪枝②尽量减少scanf("%c", &c);的使用*/#include #include #include using namespace std;const int nMax = 8;char map[nMax][nMax];int visit[nMax][nMax];int n, m, t;

2012-08-16 22:25:11 538

原创 POJ 2774 Long Long Message(后缀数组)

/*题意:输出两个字符串最大公共子串题解:将两个字符串对接,中间使用一个从未出现过的字符相连,然后问题就可以使用后缀数组解决*/#include using namespace std;const int nMax = 1000000;const int mMax = 0x7fff;char str[nMax];int num[nMax];int wa[nMax], wb[

2012-08-15 23:15:02 609

原创 POJ 1442 Black Box(堆实现)

/*题意:ADD(a)表示向集合中增加元素a,get表示取出第k小元素,k根据get出现的次数不断变化,出现多少次取第几小数题解:每次取第k小元素,k不断更新。使用两个堆,来完成。小顶堆负责,选出最小的元素大顶堆负责,选出k个元素中最大的元素,即第k小元素*/#include using namespace std;const int nMax = 30010;int tre

2012-08-15 20:18:45 648

原创 HDU 4006 The kth great number(优先队列、堆实现)

/*题意:"I"表示输入数据,"Q"表示输出第k大数据题解:优先队列,从大到小,队列中只需要k个元素。每次输出最小的即可我用小顶堆实现,如果插入元素比tree[1]小,则直接舍掉。否则,更新。*/#include using namespace std;const int nMax = 1000010;int tree[nMax];int n, k;void build(

2012-08-14 21:40:18 734

原创 素数专题

#include #include using namespace std;const int nMax = 10000000;int isPrime[nMax];int prime[nMax];int factor[nMax];int len;void f1()//朴素筛选{ int n;//求[1, n]之间的素数 scanf("%d", &n); len = 0

2012-08-14 16:36:47 829 1

原创 后缀数组小结

初学后缀数组://后缀数组模板int wa[maxn],wb[maxn],wv[maxn],ws[maxn];//这些都是需要用到的中间变量int cmp(int *r,int a,int b,int l){ return r[a]==r[b]&&r[a+l]==r[b+l];}void da(int *r,int *sa,int n,int m)//这里的n应该是字符串长

2012-08-11 16:29:27 644

原创 POJ 3250 Bad Hair Day(单调队列)

/*题意:第i头牛,只能看到它右边比他矮的牛的牛头,问所有的牛能看到牛头总数题解:从后往前搜索,队列中存储牛的最高身高,到第i头牛的时候,对队列进行一次搜索,找到比第i头牛高的牛的最小身高和所在位置j,这样j - i - 1就是第i个牛能够看到的牛头数*/#include using namespace std;const int nMax = 80010;const int I

2012-08-10 09:49:52 537

原创 HDU 3415 Max Sum of Max-K-sub-sequence(单调队列)

/*AC思路:使用sum[i]存储前i个序列之和,队列中存储区间内出现过最小序列和,这样只需要sum[i]前去最小序列和即可。*/#include using namespace std;const int nMax = 100010;const int INF = 0x7fffffff;int A[nMax];int sum[2 * nMax];//这里需要增倍struct Q

2012-08-09 19:54:36 1246

原创 POJ 2823 Sliding Window(单调队列)

/*单调队列适合解决的问题,多次查询k个连续序列中最大或最小值。可以将复杂度从O(n*n)缩短到O(n)。实现模式:队列实现,只不过其中元素单调(依次增大或减小),我们假设求最大值。入队时比较队尾元素与插入元素的大小,如果队尾元素小与插入元素,则对尾元素出对,直到大于等于位置。这样插入k个元素后,队列中队首即为最大值。继续进行第二次查询时,需要比较队首元素在原来元素中的位置,判断是否在这次

2012-08-09 11:29:44 476

原创 HDOJ 4162 Shape Number(最小表示法 )

/*题意:输入一个字符串,首先进行转换,对应位置变为该位置逆时针到下一个位置需要的变化次数,如果是最后一个则下一个位置为第一个。s[i] = s[i + 1] - s[i];如果s[i]为负,则加上8最小表示法*/#include using namespace std;const int nMax = 300010;char s[nMax];int ans[nMax];

2012-08-08 16:19:34 487

原创 HDU 3374 String Problem(最小表示法 + KMP求周期)

/*题意:环状字符串,输出最小表示数和最大表示数,和出现的次数题解:最小表示法 + KMP利用最小表示法求出最小表示数和最大表示数然后利用KMP求出字符串的最小循环节*/#include using namespace std;const int nMax = 1000010;char S[nMax];int next[nMax];int solve1(int len

2012-08-08 11:08:42 744

原创 HDOJ 1024 Max Sum Plus Plus 最大K段子序列和(01背包 + 滑动数组 + 优化)

/*/*超时。题意:输出m个子序列和的最大值思路:动态规划 + 滑动数组d[m][j] = max(d[m][j - 1] + e[j], max(d[m - 1][k] + e[j]) | k ∈ [m -1, j)).表示前j个序列分割成m组,最大序列和因为状态方程中只用到d[m]和d[m - 1]两个状态,所以只需要一个二维数组即可。优化:至于max(d[m - 1][k

2012-08-07 15:36:59 964

转载 poj--题目分类

poj--题目分类2006-10-12 22:161、   排序1423, 1694, 1723, 1727, 1763, 1788, 1828, 1838, 1840, 2201, 2376, 2377, 2380, 1318, 1877, 1928, 1971, 1974, 1990, 2001, 2002, 2092, 2379,100

2012-08-07 09:34:18 528

原创 hdoj 1011 Starship Troopers(树状DP)

/*这道题还不错,四星题意:N个洞,M个士兵,每个洞中有a个bug,b个brain,每个士兵可以处理20个bug,入口在洞口1处,问可以得到多少个brain。思路:0-1背包问题状态方程:d[a][b] = max(d[a][b - k] + d[j][k]),其中a、j之间有边相连。d[a][b]表示以a为根节点的子树,包含b个士兵,所能得到最大brain。按a来分层进行动态规划。

2012-08-07 00:52:59 2172

原创 米勒-拉宾算法

米勒-拉宾算法:快速判断一个数是不是素数需要用到的定理:最小费马定理:如果n是素数,则(a ^ (n - 1)) % n恒等于1。快速模取幂米勒-拉宾算法就是结合上面两种,通过不断判断fmod(a, n - 1, n)的值是否为1来判断。这是一个概率算法,如果为1,不一定为素数,不为1,则必定是合数。循环判断多次就会让概率变得极为的小。算法模板:#include u

2012-08-06 11:20:32 4783 2

原创 AC自动机(多模式匹配)

AC自动机主要解决的问题:多模式匹配(KMP则属于单模式匹配),n个单词在m个字符的文章中,出现过多少次。主要分三步:构建trie树、构建失败指针、寻找匹配个数Trie树:又称字典树、单词查找树,是一种树形结构,用于保存大量的字符串。它的优点是:利用字符串的公共前缀来节约存储空间。具体参见:http://www.cppblog.com/abilitytao/archive/2009

2012-08-02 19:43:39 803

原创 POJ 1024 Tester Program

/*WA主要思路:首先DFS建立层次图。然后判断,路径是否唯一,墙壁是否重复。*/#include //#define TESTusing namespace std;const int nMax = 105;const int mMax = 10100;int dis_s[nMax][nMax], dis_e[nMax][nMax];char s[mMax];stru

2012-08-02 11:07:00 792

原创 字符串处理 --- 最小表示法

最小表示法:循环数组中,使用字典序最小的一个序列来表示这个数组。例如A[5] = {5, 1, 3, 2, 4},则最小表示法为{1, 3, 2, 4,5}。问题:输入两组数据,这两组数据都是循环数组或者环状数组,判断这两组数据是否一致?设两个数组分别为A[],B[]。解决方案:正常解题思路:使用两个for循环进行O(n * n)次判断即可KMP方法:将A复制一份加到A

2012-08-02 09:12:28 824

JavaScript.DOM编程艺术(第2版)附录及源码.rar

JavaScript.DOM编程艺术(第2版)附录及源码.rar

2013-06-08

C和C++辞典.chm

C和C++辞典,chm

2012-05-02

新编Win32API大全(中文版).chm

新编Win32API大全(中文版),中文版,

2012-05-02

C++STL程序员开发指南.pdf

C++,STL,pdf,C++STL程序员开发指南,

2012-05-02

MFC类库详解.chm

MFC类库详解,chm

2012-05-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除