- 博客(14)
- 资源 (1)
- 问答 (1)
- 收藏
- 关注
原创 矩阵相关
本来是刷AC自动机的题目,不过看了n道题说都要用矩阵,所以就看看矩阵,刷刷矩阵入门题。随便写几篇接替报告。 这里就不介绍了,网上的大牛已经讲的很清楚了。 matrix67的博客:点击打开链接 酷行天下的博客:点击打开链接 下面给一点自己的理解 一、矩阵的快速幂 要想解决矩阵快速幂的问题,不妨来研究
2013-07-28 00:56:08 601
原创 Hdu 1757 A Simple Math Problem//矩阵乘法
唉,是一道水题,但是错把b也为a,狂wa。。。 还有每次取模,否则,溢出。 下面是代码: #include #include #define maxn 15 struct node { int m[maxn][maxn]; void init() { memset(m,0,sizeof(m)); } } A,B; int k,m;
2013-07-22 10:27:56 644
原创 Poj 1977 Odd Loving Bakers//矩阵
这道题,推一下关系式就出来了。 下面是代码: #include #include #include #include using namespace std; const int maxn = 100 + 10; string s; char str[maxn]; map Map; struct node { int m[maxn][maxn]; void init()
2013-07-21 21:15:57 658
原创 Hdu 1005 Number Sequence//矩阵快速幂
裸的矩阵乘法加矩阵快速幂 下面是代码: #include #include #define maxn 1010 int A,B,n; struct node { int m[2][2]; void init() { memset(m,0,sizeof(m)); } } a,b; node martix_mul(node a,node b) {
2013-07-21 21:13:57 716
原创 Hdu 3065 病毒侵袭持续中//Aho-Corasick Automaton
这道题题目没说是多case,所以无情wa了半个多小时。囧!AC自动机的水题,下面是代码: #include #include #include #include using namespace std; #define maxn 1010*50 #define maxc 26 int ch[maxn][maxc]; int val[maxn]; int f[maxn]; int cnt; in
2013-07-21 09:26:15 941
原创 Hdu 2896 病毒侵袭//Aho-Corasick 自动机
还是一道裸的AC自动机的题目,但是字符集扩大了。字符都是ASCII码可见字符。不知道什么是字符都是ASCII码可见字符,所以RE了很多次,囧! 下面是代码: #include #include #include using namespace std; const int maxn = 10005; const int maxc = 128; int ch[maxn*6][
2013-07-20 19:36:15 856
原创 Hdu 2222 Keywords Search//Aho-Corasick 自动机
裸的AC 自动机,但是题目没有说明白啊。 keyword 是可以重复的,同时也要就算这些重复的keyword,囧! 下面是代码,将当做AC 自动机的模板吧,以后几天,当然还是要多多理解AC 自动机,多敲模板了。 #include #include #include #define maxs 1000050 #define maxn 500050 using namespace std; i
2013-07-19 23:33:31 659
原创 Poj 1960 Period//kmp
如果P[1...K]与P[L-k+1...L]匹配(L为字符串长度),那么P[L-k+1...L]这一段字符一定是在重复P[1...L] - P[L-K+1...L]这段字符。 反证法:如果不是重复这一段,那么P[1...K]与P[L-k+1...L]不可能匹配。可以画图试一试。 注意字符串开始位置是0.下面是代码: #include #include #define m
2013-07-18 19:34:28 684
原创 Poj 1190 生日蛋糕//回溯,减枝
首先吐槽一下求面积和体积不用π。 其实不减枝的代码还是很好写的: //m为蛋糕的层数 //v为当前已涂的体积 //s为当前已涂得到的S //r和h为当前层的半径和高 void dfs(int m,int v,int s,int r,int h) { //推出条件 if(m == 0) { if(ans > s && v == N) an
2013-07-17 21:12:32 1033
原创 KMP小讲
设文本为T,模式串为P 暴力法匹配 从T的第一个字符开始匹配,然后从T的第二个字符开始匹配,依次匹配下去,直到匹配成功。 设i为正在匹配的字符,那么此时有 T[s+1]...T[s+i] = P[1]...P[i]。可以知道这个部分的字符串是匹配成功的,记为S。如果S很长(在i之前很多字符都匹配),那么暴力法就重复判断了S这部分的字符,浪费了时间。KMP就是在这里优化匹配的时间的复
2013-07-17 15:38:28 633 8
原创 Poj 2513 Colored Sticks//Trie+并查集+欧拉通路
这道题可以直接看出是用欧拉通路来做,但是数据特别大,只能想办法压缩数据。所以用Trie树来储存几万种颜色,并给这些颜色标记为相应的结点。 下面是代码: #include #include #define maxn 510000 int ch[maxn][26]; int val[maxn]; int degree[maxn]; int f[maxn]; int cnt; int ID;
2013-07-17 14:18:48 684
原创 Uva 1401 - Remember the Word//TRie
这道题目主用递推做。 设一个单词W,由(w1,w2,···,wn)个字母组成,判断其有多少种单词的组合方法。 给定任意一个后缀(wi,wi+1,···,wn),想要判断有多少种组合方法,就要找到它的前缀。不妨设(wi,wi+1,···,wn)这个后缀的前缀为x,就要找到这个后缀有多少个前缀(这里所说的前缀是说的是单词)。不妨设d(i)表示从i到n这个后缀有多少种组合方法,设x为这个
2013-07-16 20:53:54 800
原创 Poj 2503 Babelfish//Trie树
这道题目就是裸的Trie树,当然了也可以用其他方法做。这里为了训练的目的用Trie树做。就是这道题的输入让人蛋疼。Orz 下面是代码,哈哈自己写的Trie的模板。 #include #include #define maxn 200010 struct node { char val[11]; int ok; } Val[maxn]; int ch[maxn
2013-07-16 11:21:29 596
原创 暴力之回溯法入门(持续更新)
刷刷水题,入个门先: 百练oj:2754 八皇后 西电oj:1010 素数环 Poj:1011 Sticks 百练oj:2754 八皇后 先打表,这样节省时间。不过这道题还用存下每个可能解。 下面是代码: #include #include using namespace std; const int maxn = 100; const int N = 8; int A[
2013-07-15 21:47:15 1128
Poj 1011 TLE...求大神指教0.0
2013-07-15
TA创建的收藏夹 TA关注的收藏夹
TA关注的人