自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

AC_Gibson的专栏

while(alive) ACing;

  • 博客(47)
  • 收藏
  • 关注

原创 POJ2503 Babelfish Tire树

题目大意:给出一个单词之间的意义对应关系,然后有若干次询问,每次询问给出一个单词,让你输出与该单词对应的单词。分析:map可以做,tire树也行。可以说是 HDU1075 的简易版。不过这题真正纠结人的是输入部分====卡了我n久啊。实现代码如下:#include #include #include #include #include using namesp

2015-04-30 19:06:32 483

原创 HDU1247 Hat’s Words Tire树

题目大意:给你若干字符串,让你找出这些字符串中由其他两个字符串连接成的字符串。分析:我们很容易想到的是先把这些字符串存放到tire树中,然后分别查询每两个字符串连接构成的新字符串是否在树中,想法很美好,但这样的时间复杂度是0(n^2)的,而n是50000的,果断TLE了。后来我换了一种思路,和合并操作等价的操作就是拆分:我们遍历这n个字符串,把每个字符串可拆分的字符串找出来,分别判断他

2015-04-30 17:49:51 487

原创 HDU1671 POJ3630 Phone List Tire树

题目大意:给你n个长度小于10的电话号码,让你判断是否存在一个号码是其他号码的前缀,若存在,输出NO,否则输出YES。分析:大量数据查询短字符串,一看就是Tire树的题。把n个号码存入之后,遍历查询这n个号码,如果存在某一个号码所对应的节点的num值大于1,那么就说明该组号码有不止一个这样的前缀,即:存在一个号码是其他号码的前缀,跳出循环输出结果即可;如果所有节点的num值都不大于1,

2015-04-30 16:30:51 512

原创 HDU1075 What Are You Talking About Tire树

题目大意:给你一篇火星文,让你按给定的词典翻译成英文并输出翻译后的文章,对于词典中没有的火星文,直接原样输出即可。分析:Tire树的应用,在插入数据的时候顺便把火星文对应的英文单词记录即可,这样在查询的时候,如果查询成功,那么就输出其对应的英文,否则原样输出。实现代码如下:#include #include #include #include using nam

2015-04-30 13:30:01 702

原创 HDU1251 统计难题 tire树

题目大意:给你一系列字符串作为母串,对于若干次询问,每次询问包含一个字符串,输出该以字符串为前缀的母串的数目。分析:典型的tire树,在每次插入数据的时候纪录前缀数。实现代码如下:#include #include #include #include using namespace std;#define son_num 30 //字符串中包含的字符个数#d

2015-04-29 14:39:47 520

原创 Tire树(字典树)的基本操作

Tire树的基本原理:    Tire树是一种树形结构,因其是词典的一种存储方式,故又叫字典树。词典中的每一个单词在tire树中表现为一条从根结点出发的路径,路径边上的点连起来就是一颗tire树,如右图:其中含有ab,abc,bac,bbc,ca五个单词。    Tire树的基本性质可以归纳为:(1)根结点不包含字符,其他的每一个节点只包含一个字符;(2)从根结点到

2015-04-29 13:20:21 5518 2

原创 hihoCoder1097 1098 1109:最小生成树

hihoCoder1097:最小生成树一:Prime算法题目链接:http://hihocoder.com/problemset/problem/1097分析:Prime算法用的是土的邻接矩阵,这在图中顶点数比较小的时候是挺有效的。实现代码如下:#include #include #include #define MAX 1005#define INF 999999

2015-04-28 16:05:47 617

原创 hihoCoder1081 1089 1093 :最短路径

hihoCoder1081 最短路径一题目连接:http://hihocoder.com/problemset/problem/1081分析:求单源最短路径,点集和边集都不大,邻接矩阵存储即可。Dijkstra算法实现代码如下:#include #include #define INF 999999999#define MAX 10005using name

2015-04-28 09:42:49 596

原创 hihoCoder1015 KMP算法

题目连接:http://hihocoder.com/problemset/problem/1015分析:找出子串在主串中出现的次数。实现代码如下:#include #include #include using namespace std;int nex[10100];char a[1000010],b[10100];void init_next(){

2015-04-27 14:24:13 847

原创 C++STL中全排列函数next_permutation的使用

next_permutation函数    组合数学中经常用到排列,这里介绍一个计算序列全排列的函数:next_permutation(start,end),和prev_permutation(start,end)。这两个函数作用是一样的,区别就在于前者求的是当前排列的下一个排列,后一个求的是当前排列的上一个排列。至于这里的“前一个”和“后一个”,我们可以把它理解为序列的字典序的前后,

2015-04-27 12:35:02 34301 2

原创 2015编程之美挑战赛:扑克牌 全排列

第一题:扑克牌题目连接:http://hihocoder.com/contest/msbop2015round2b/problem/1时间限制:2000ms单点时限:1000ms内存限制:256MB描述一副不含王的扑克牌由52张牌组成,由红桃、黑桃、梅花、方块4组牌组成,每组13张不同的面值。现在给定52张牌中的若

2015-04-27 12:24:06 1418

原创 2015编程之美挑战赛:八卦的小冰

第三题:八卦的小冰题目链接:http://hihocoder.com/contest/msbop2015round2b/problem/3时间限制:2000ms单点时限:1000ms内存限制:256MB描述小冰是个八卦的人,最近她对一个社交网站很感兴趣。由于小冰是个机器人,所以当然可以很快地弄清楚这个社交网站中用户的信息啦。她

2015-04-26 16:55:38 994 3

原创 POJ1067 取石子游戏 威佐夫博弈

威佐夫博弈,没什么好说的,知道原理很简单。参考:博弈论详解实现代码如下:#include #include #include using namespace std;int main(){ int n1,n2,temp; while(cin>>n1>>n2) { if(n1>n2) swap(n1,n2);

2015-04-24 16:25:10 586

原创 POJ1936 All in All 字符串水题

题目大意:给你两个字符串s和t,让你判断s是否为t的子序列。分析:不知道该怎么分析了....直接贴代码吧==水题代码如下:#include #include #include using namespace std;string s,t;int main(){ while(cin>>s>>t) { int i,j=0;

2015-04-24 16:09:44 518

原创 POJ3450 Corporate Identity 最长公共子串

题目大意:给你n个字符串,让你找出他们的最长公共子串,如果存在多条,输出字典序最小的一个,若不存在,输出“IDENTITY LOST”。分析:感觉就是 POJ1226,POJ3080 的综合。数据量不大,暴力就可以过。我感觉这题的考察点应该是字符串的排序,在找出m个最长公共子串后输出字典序最小的一个字符串才是本题的一个坑。至于字符串排序,可以参考一下:字符串排序详解实现

2015-04-24 15:05:58 809

原创 POJ2185 Milking Grid 最小覆盖子矩阵(二维KMP)

题目大意:有一个R×C规模的字符矩阵,求出最小的子矩阵,使该矩阵可以由子矩阵平移得到,输出子矩阵的大小。分析:很明显,符合条件的子矩阵(设该矩阵的规模为w×h)需要同时满足:(1)该子矩阵的h行可以看成h个字符串,原矩阵中任一行字符串都可以由这h个字符串中的一个平铺形成;(2)该子矩阵的w列也可以看成w个字符串,原矩阵中任一列字符串也都可以由这w个字符串中的一个平铺而成;

2015-04-24 13:56:08 1009 1

原创 POJ2406 Power Strings KMP-next数组的循环节

题目大意:给定一个字符串,让你找出该字符串的最大循环节。分析:next数组的循环节问题。一开始我是暴力next数组的每一个值,找出其中满足循环的最大值,后来发现这样做不可行,因为对于aaaaaab这个字符串来说,他的循环节很明显为1,但aaaaaa这个子串的循环节是6,所以找出整个next数组的最大循环节就出错了。其实我们只需找出next[ len ]这一个值的循环节即可,因为这是个后

2015-04-23 20:52:31 565

原创 POJ2752 Seek the Name, Seek the Fame KMP-next数组的应用

题目大意:给你一个字符串,让你找出既是前缀同时又是后缀的子串在主串中的位置,如果有多个,按升序输出。分析:考察KMP算法中对next数组的理解。我们知道next[ j ]纪录的是字符串第j个位置之前的next[ j ]个连续的字符和该串的长度为next[ j ]的前缀是相同的。既然如此,要判断一个后缀是否等于前缀,只需看next[ len ]是否等于0即可,next[ len ]!=0

2015-04-23 19:21:32 366

原创 字符串匹配之KMP算法

以前零零散散做了些KMP的题目,一直也没找出时间整理,这一段又开始研究字符串了,就顺便把KMP整理了一下。废话不说了,我们直接入题。    说到KMP,首先应该知道,它是一种字符串查找算法,因为是由一个姓K,一个姓M和一个姓P的人联合发表的,所以就叫KMP算法了。KMP算法是一种线性时间的的字符串匹配算法,能在O(m+n)的时间数量级上完成字符串的模式匹配操作。它对简单的模式匹配(就是暴力==

2015-04-22 17:44:14 598

原创 POJ3080 Blue Jeans 最长公共子串

题目大意:给出n个长度为60的字符串,找出他们之间的最长公共子序列的大小。 分析:刚开始以为是数状数组的题,后来发现暴力就可以过== 实现代码如下:#include #include #include using namespace std;#define maxn 105char str[maxn][maxn];int n;bool judge(i

2015-04-22 10:39:35 678

原创 HDU1238 POJ1226 Substrings 最长公共子串(子反串也算)

题目大意:给你n个长度小于100的字符串,让你找出他们之间的最长公共子串。其中,如果一个字符串含有另外一个子串的反串,那么这个子串也算做是他们之间的公共子串。分析:我们可以先找出给出的字符串中长度最小的一个,然后遍历它的所有子串,分别判断这个子串是不是其他字符串的子串。数据量不大,暴力可以过。实现代码如下:#include #include #include us

2015-04-21 16:20:29 927

原创 HDU1159 Common Subsequence 最长公共子序列

题目大意:给你两个字符串,让你找出他们的最长公共子序列。分析:裸LCS实现代码如下:#include #include #include #include using namespace std;#define maxn 1005int dp[maxn][maxn];int main(){ string str1,str2; while(cin>

2015-04-21 12:00:05 583

原创 LCS之最长公共子串

最长公共子串(Longest Common Substring)是指几个字符串之间的公共子串中长度最大的一个。它可以说是最长公共子序列的一种特例,同样可以用动态规划的思想来解决,不同点就在于求最长公共子序列时我们只需要把光标向后移,而不用去关心它移动了多少位,但在求最长公共子串的时候,我们就需要关心光标后移的个数了。我们仍然拿  求两个字符串str1和str2之间的最长公共子串  来讨论:

2015-04-21 11:06:43 724

原创 LCS之最长公共子序列

最长公共子序列(Longest Common Subsequence)是指几个字符串之间公共的子序列中长度最长的一个子序列。注意子序列和子串的区别:子序列可以是非连续的,而子串则是连续的子集。    通用的求最长公共子序列的算法是利用动态规划的思想。对于求两个字符串str1,str2的最长公共子序列的问题,我们用一个二维数组lcs(i,j)来纪录在 字符串str1中第i个元素之前的子串 和 s

2015-04-20 20:40:07 486

原创 ZOJ3846 GCD Reduce 数论

题目大意:给你一个n个数的数组num(下标从1开始),让你进行若干次操作,每次操作包括:(1)选择出下表为i和j的两个数;(2)分别令num[ i ]=num[ j ]=gcd(num[ i ],num[ j ])。操作终止,当且仅当数组num中的所有数都为1。然后输出操作次数和每一步的操作。如果数组不可能全变为1,那么输出-1。分析:首先我们应该知道,把数组num中的元素两两

2015-04-20 18:50:00 638

原创 POJ1035 Spell checker 字符串模拟

题目大意:先输入一个词典(以#号结束),词典中的每个词条为一个字符串,然后有不定次询问(询问也以#号结束),每次询问是给出一个字符串c,问你在不在词典中,如果在,输出“c is correct”;如果不在,做下列3种操作:(1)改变c中的一个字符;(2)删除c中的一个字符;(3)在c中增加一个字符;如果c在完成以上操作后变成了词典中有的字符串,那么就把改变后的c输出,如果没有,原样输出c。其中,所

2015-04-20 16:14:02 640

原创 既然选择了AC,就算单干我也要走到头

最近发生的事太多,感觉总憋在心里也不是个事,也没有什么所谓的红颜知己来倾诉,想想自己也只有写篇博客发发牢骚了,呵,真是人艰不拆呢,混到如此地步。    今天参加外校的校赛,由于是个人赛,让我对实验室其他队员的实力也又有了一个新的了解,毕竟这么长时间一直打的组队赛(我和一个大三的学长,还有一个忽略不计的菜鸡临时组的队)。打完比赛回学校的路上不经意发现了一个比较悲惨的现实:我现在是大二,大三的全都

2015-04-19 20:47:13 1014 6

原创 2015编程之美资格赛:基站选址 暴力

第三题:基站选址题目链接:http://hihocoder.com/contest/msbop2015qual/problem/3分析:小数据直接暴力就OK了,至于大数据吧========还没思路(别打我...我菜我认了)实现代码如下:#include #include #include using namespace std;#define INF 0x7

2015-04-19 19:49:00 707

原创 2015编程之美资格赛:回文子序列数 DP

2015编程之美资格赛第二题:回文子序列数题目链接:http://hihocoder.com/contest/msbop2015qual/problem/2分析:动态规划。用一个数组dp(i,j)表示在给定字符串str中第i个元素到第j个元素之间回文子序列的个数,在j==i时dp(i,j)=1;j和i相邻时判断str[ i ]和str[ j ]是否相等,分别赋值给dp(i,j)3和

2015-04-18 14:53:58 794

原创 2015编程之美资格赛:2月29日 模拟题

第一题:2月29日题目链接:http://hihocoder.com/contest/msbop2015qual/problem/1模拟题,没什么算法,之一细节就行了。实现代码如下:#include #include #include using namespace std;char mon[12][10]={"January", "February", "

2015-04-17 19:28:59 1489 2

原创 大数斐波那契取模模板

大数斐波那契取模:#include #include #include using namespace std;const int mod=19999997;typedef struct{ long long m[2][2];}matrix;matrix I={1,0,0,1};matrix P={0,1,1,1};matrix mul(matrix a,matri

2015-04-17 16:42:41 1651

原创 POJ1129 Channel Allocation DFS

题目大意:广播电台广播时为了让听众接收到一个比较稳定的新号,一般都会有若干个中继器来重发新号,以此达到增强新号的目的(每一个中继器用一个大写的英文字母表示)。已知每个中继器都需要一个频带,而且当两个中继器相邻时,他们所使用的频带就不能是相同的了,否则他们会相互干扰彼此的信号传播。现在,给你广播电台中继器之间相邻关系的网络,让你判断出最少需要使用多少不同的频带。分析:广播电台中继

2015-04-17 15:35:27 620

原创 POJ2676 Sudoku DFS

题目大意:将数独补充完整。给你一个不完整的9×9的数表,让你补充完整,使完整的数表中每一行,每一列,和每一个小的3×3的数表中是数字分别互不相同。分析:枚举每一个空点,在该点填入一个数的基础上重复这步操作,直到数独补充完整。DFS思想。实现代码如下:#include #include #include using namespace std;int map[

2015-04-16 17:42:55 513

原创 POJ2531 Network Saboteur DFS 或 无向图的最大割

题目大意:给你一个无向完全图,让你求出该图最大割。分析:裸的最大割问题,随机算法就行,卡好时间。实现代码如下:#include #include #include using namespace std;int maze[25][25];int main(){ int n; while(scanf("%d",&n)!=-1) {

2015-04-15 19:39:04 1138

原创 POJ3414 Pots BFS

题目大意:给出两个容量分别为V1,V2的瓶子,和目标水量C,瓶子可以进行如下3种操作:(1)FILL( i ):将第i个瓶子装满水(i=1,2);(2)DROP( i ):将第i个瓶子里的水全部到出(i=1,2);(3)POUR( i,j):将第i个瓶子的水倒入第j个瓶子中(或将i中的水全部倒入j中,或将i中的一部分水倒入j中的时候j已经装满)。现在问你经过多少次操作能使其中一个瓶

2015-04-15 14:18:19 461

原创 POJ3087 Shuffle'm Up 模拟题

题目大意:一副扑克牌,开始时分成两组S1和S2(每组C张),给你一个含有(2C)张牌的目标序列,然后洗牌,洗牌时把S2最下面的牌放在最下面,然后S1和S2交错排列,洗完牌后看这个序列是否为目标序列,如果不是,则拆开这个序列,拆开时把最下面的C张牌给S1,上面的C张给S2,然后洗牌,以次类推,找出洗出目标序列所需要的洗牌次数。如果目标序列不可能洗出,输出-1。分析:模拟洗牌分牌过

2015-04-14 20:44:29 531

原创 POJ3126 Prime Path 四维BFS

题目大意:给你两个4位素数A和B,让你把A经过若干次修改后变为B,每次修改只能修改A中的一个数字且修改后的数要仍为素数,且修改的过程中不能出现重复的素数。问你素数A变为素数B最少需要经过几次修改。如果不存在一系列的修改使A变为B,输出Impossible。分析:四维BFS。我们把每一个数子对应为一个四维数组,那么问题就变为了在一个四维空间中,由起始点(素数A)到终点(素数B)的最短距离

2015-04-14 19:04:32 813

原创 POJ1426 Find The Multiple BFS

题目大意:给你一个十进制整数n,让你找出n的十进制倍数m,使m满足每位上的数字只能是0或1。如果存在多个,那么就任意输出一个。分析:m和n的范围不太大,首先想到的就是暴力=_=!暴力过程中发现需要同时记录两个结果:当前数cnt乘10之后加0和加1,因为要分别在这两种情况之后考虑后面的情况,后面类推也是如此,感觉像是一层一层的往外搜索---BFS。实现代码如下:#in

2015-04-14 16:24:19 510

原创 POJ3278 Catch That Cow BFS

题目大意:FJ发现了一只逃亡的奶牛想要把它抓回来,已知FJ在N点,奶牛在同一水平线上的K点,FJ可以在一个时间单位内向左或向右移动一步,也可以有x点移动到2x点。现在问你FJ要抓回奶牛最少需要多少时间。分析:要搜索最少时间,果断BFS,把方向数组换成X+1,X-1,X*2就行了。实现代码如下:#include #include #include #include

2015-04-14 12:12:39 516

原创 POJ3009 Curling 2.0 DFS

题目大意:定义了一种新规则的冰球游戏,在一个w×h的场地移动冰球,场地内有障碍物,冰球从起点到终点的移动方式如下:(1)冰球可以向上下左右中的任意方向移动;(2)冰球一旦开始移动,就不会停下来除非:        (a)冰球到达终点;        (b)冰球碰到了障碍物;(3)冰球碰到障碍物时,冰球会停在障碍物面前,同时障碍物消失。(4)游戏结束,当且仅当:    

2015-04-13 21:51:01 488

空空如也

空空如也

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

TA关注的人

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