自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 收藏
  • 关注

原创 poj 3261 Milk Patterns (后缀数组)

题意:可重叠的k次最长重复子串。思路:后缀数组。先二分答案,然后将后缀分成若干组。这里要判断的是有没有一个组的后缀个数不小于k。如果有,那么存在k个相同的子串满足条件,否则不存在。时间复杂度为O(nlogn)。没用二分,直接一遍循环查找结果过掉的代码:#include #include #include #include #include #inclu

2016-03-31 17:08:21 575

转载 后缀数组模板讲解

const int N = int(2e5)+10;int cmp(int *r,int a,int b,int l){    return (r[a]==r[b]) && (r[a+l]==r[b+l]);}// 用于比较第一关键字与第二关键字,// 比较特殊的地方是,预处理的时候,r[n]=0(小于前面出现过的字符)int wa[N],wb[N],ws[N],w

2016-03-31 14:28:50 685

原创 poj1743:Musical Theme(后缀数组)

题意:有N(1     1.长度至少为5个音符。    2.在乐曲中重复出现。(可能经过转调,“转调”的意思是主题序列中每个音符都被加上或减去了同一个整数值)    3.重复出现的同一主题不能有公共部分。思路:这是论文里一道题,那么我们通过进行二分来求论文里的k值,求出height[i]大于k的时候,然后求出这个区间里面起始位置最大的差值,要求差值也

2016-03-31 13:59:55 345

原创 HDU 2594 Simpsons’ Hidden Talents(KMP)

题意:给定两个字符串s1,s2,求最长的s1前缀ss使得ss为s2的最长后缀,输出该字符串和其长度。做法1:将两个字符串首位相接,直接利用next数组性质得出答案#include #include #include #include #include #include #include #include #include #include #include #incl

2016-03-30 19:28:55 463

原创 poj3080 Blue Jeans (多个字符串匹配)

题意:求n个字符串的最长公共串。思路很简单:枚举第一个字符串的不同长度子串,判断她是否为下面多有的公共子串?如果是的话,那么我们就表明找到,则比较其长度,如果比已经找到的串长,那么就替换结果串 否则按字典序比较。取字典序考前的,就可以。#include #include #include #include #include #include #include

2016-03-30 18:25:01 472

原创 POJ 2752 Seek the Name, Seek the Fame(next数组的应用)

题意:找出所给串的所有前缀长度,使得所给串中这个长度的前缀==这个长度的后缀 Sample Input ababcababababcabab aaaaa Sample Output 2 4 9 18 1 2 3 4 5 看了HDU 1686 Oulipohttp://972169909-qq-com.iteye.com/blog/1070507 相信ne

2016-03-28 20:09:01 512

原创 HDU 3746 Cyclic Nacklace (next数组的应用)

题目大意:给你一个字符串,要求将字符串的全部字符最少循环2次需要添加的字符数。例子:abcabc 已经循环2次,添加数为0abcac 没有循环2次,添加字符abcac。数目为5.abcabcab 已经循环过2次,但第三次不完整,需要添加数为1解题思路:next[]数组的运用。#include #include #inc

2016-03-28 16:39:13 351

原创 HDU 1686Oulipo

HDU的题意就是,给你一个字符串A,一个字符串B,求A在B中总共出现了几次,注意,重复的也算。KMP算法,过程中记录次数。#include #include using namespace std;#define L(i) i<<1#define R(i) i<<1|1#define INF 0x3f3f3f3f#define pi acos(-1.0)#de

2016-03-28 16:03:01 483

原创 hdu 5652 India and China Origins (★)

题意:上边是中国,下边是印度,黑点的部分不可以走,下面的矩阵1代表黑点不能走,然后给了Q,每一次将一个点变成黑点,即不能走,问最少多少次就可以完成分析:这是一个连通性的问题。你会发现如果将所有操作逆序来看的话就很容易用并查集来处理了。 首先把所有的山峰都加到图中,然后逆序处理每个操作:对某次操作,在图中删除该位置的山峰,然后判断两个点是否联通,一旦联通就得到了结果。 这里需要对

2016-03-27 20:30:48 796

原创 codeforces 118D Caesar's Legions (好题)

题意: 有n1个骑兵,n2个步兵,排成一列。 求满足下列条件的排列数。 1)连续的骑兵不超过k1 2)连续的步兵不超过k2 思路: 使用状态dp【i】【j】【k】,i,j:步兵,骑兵个数  k:0是步兵,1是骑兵状态方程:for(int k = 1; k                 dp[i][j][0] = (dp[i][j][0] + dp[i-k][j

2016-03-27 19:31:44 1142

原创 CodeForces 332B Maximum Absurdity

题目大意:给出一个序列,让找出不互相覆盖的两个长度为k的段,问在两个段的权值和最大的情况下,按照左边段的左端点排序,右边段的左端点作为第二关键字排序,得到的第一个答案。题目分析:dp:dp1[maxn],dp2[maxn]; dp1【i】表示前i项连续k段最大值,dp2【i】表示后n-i项连续k段最大值,然后做一次循环就好#include #i

2016-03-27 18:58:00 521

原创 CodeForces 431C k-Tree

题目大意:满k叉树,每个顶点有k条边,边的权重为1~k,现求出从根节点出发,有多少条路径,使得总权值恰好为N,并且每条路径上至少有一条权值不少于d的边。题目思路:dp[i][h],第一个参数从1-n,遍历权值为i的情况,h有两种情况,0和1,0表示权值为i的所有情况,1表示权值为i的时候路径中存在一个值大于d的情况。状态转移方程://权值为i的处理所有情况 dp[

2016-03-27 17:52:59 486

原创 codeforces 351A A. Jeff and Rounding(★)

题目大意:给出2*n个数,n个向上取整,n个向下取整,求新的数的和与原始的数的和的最小差距。题目分析:机智的人会发现,先对所有的数的小数部分取和,然后如果出现一个向上取整的,那么sum的变化一定是1,所以只和向上取整的数的个数有关系,而向上取整和向下取整的个数已经确定,只有存在小数部分是0的情况的时候,值会不同,因为它转换为向上取整和向下取整的值是不变的。所以做法是,求

2016-03-27 17:38:08 1052

原创 HDU 4283 You Are the One(★)

题目:有一个队列,每个人有一个愤怒值D,如果他是第K个上场,不开心指数就为(K-1)*D。但是边上有一个小黑屋(其实就是个堆栈),可以一定程度上调整上场程序其实是一个区间DP,dp[i][j]表示从第i个人到第j个人这段区间的最小花费(是只考虑这j-i+1个人,不需要考虑前面有多少人)那么对于dp[i][j]的第i个人,就有可能第1个上场,也可以第j-i+1个上场。考虑第K个上场即

2016-03-26 18:21:11 587

原创 zoj 3469 Food Delivery (好题)

题目描述:  在x轴上有n个客人叫外卖,每个顾客因为追的番更新进度不同,所以在等外买的时间里每秒增加的愤怒值不同。给出客人和餐厅的位置,以及客人每分钟增加的愤怒值,还有快递小哥的行走一公里需要的时间。问送完外卖后n个客人的最小愤怒值?解题思路:  把餐厅所在的点加进去,然后按照在x轴上的位置排序。从餐厅所在位置向左右开始DPdp[i][j][0]表示从i到j用户送到最小不开

2016-03-26 17:07:36 511 1

原创 POJ 2955 Brackets (基础)

经典的区间DPdp[i][j]代表i->j区间内最多的合法括号数状态转移方程:if(s[i]=='('&&s[j]==')'||s[i]=='['&&s[j]==']') dp[i][j]=dp[i+1][j-1]+2;dp[i][j]=max{dp[i][k]+dp[k+1][j]};#include #include #include #include

2016-03-26 15:39:48 266

原创 POJ 3252 Round Numbers(数学问题)

Round Numbers 就是一个表示成二进制的时候0比1多或者相等的正数,注意是正数,所以0就肯定不是了。     题目是给定一个区间,问在这个区间上的Round Numbers有多少个?      首先是求出小于等于n的Round Numbers有多少个。     我先举个例子来先说明,再来说一般方法。      比如:    22 =  10110b  如果要求  

2016-03-25 16:11:31 266

原创 hdu 2089 不要62(基础)

题意:杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer)。 杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司机和乘客的心理障碍,更安全地服务大众。 不吉利的数字为所有含有4或62的号码。例如: 62315 73418 88914 都属于不吉利号码。但是,61152虽然含有6和2,但不是62连号,所以不属

2016-03-25 15:01:00 443

原创 hdu 1507 Uncle Tom's Inherited Land(行列匹配)

题意:N*M的矩形,向其中填充1*2的小块矩形,黑色的部分不能填充,问最多可以填充多少块。 题解:黑白棋最大匹配将棋盘中i+j为奇数的做A集合,偶数的做B集合,相邻的则建立联系。于是便转换成寻找最大匹配的问题#include #include #include #include #include #include #include #include #include

2016-03-22 16:11:15 334

原创 hdu 1498 50 years, 50 colors(最小覆盖点数)

题意: 给你一个n*n的矩阵,在矩阵中分布着s种颜色的气球,给你k次扎破气球 的操作,每次操作可以扎破一行,或一列的同一颜色的气球。问在k次操 作后有那几种颜色的气球是不能被完全扎破的.解题:  利用二分图匹配,寻找每一种颜色对应的最大匹配(行和列分别为X集合,Y集合;map[i,j]代表一个搭配),  如果大于k则输出"-1",否则输出颜色的递增序

2016-03-22 09:46:22 337

原创 CodeForces 417E (构造)

题意:要求构造一个矩阵,使得每行每列的平方和仍为一个平方数题解:cf的官方题解:If n = 1, then take [1].If n = 2, then take [3, 4].If n is even, then take .If n is odd, then take .代码如下:#include #include #include #includ

2016-03-21 19:30:46 438

原创 CodeForces 209C Trails and Glades(欧拉回路判断+并查集计算联通分量)

题意:判断能否构成欧拉回路,不能的话输出最小需要添加多少条边题解:并查集处理出联通分量,输入时处理出奇度数点个数,结果即为  奇度数点个数/2+不含奇度数点的联通分量个数,1节点自动算作一个联通分量 不管是否有边连接#include #include #include #include #include #include #include #include #include

2016-03-20 17:40:29 935

原创 hdu 4722 Good Numbers(规律题)

【题意】:  找GoodNumbers一个数N,如果它每一个位数字之和可以整除10,那么它就是GoodNumbers,比如451就是一个4+5+1=10,求[A,B]之间这样的数的个数 【题解】:  先写一个暴力代码用来找规律 发现: 0-10    1    0-100  10           0-1000   100         

2016-03-20 17:25:44 346

原创 POJ 2230 Watchcow (欧拉回路)

题意:对一有向欧拉图,求欧拉回路,即从点s出发,最终到达点s,每条边走且仅走一次。分析:对欧拉有向图,从点s开始深搜,直到到达点t,而且不能继续向下走为止,则s=t。为什么?用反证法可以证明。假设s!=t,则存在下面这种路线(注意每个点要出现两次):s->......->s->......->t,即s的入度为1,而出度为2,这与有向欧拉图的性质相违背,因此假设不成立。注意建图的时候要变单向为双

2016-03-19 19:35:47 422

原创 POJ 2226 Muddy Fields (最小点覆盖)

题意:一个row*col的矩阵表示一块田地,'*'表示湿地,'.'表示草地。现在FJ要在田地上铺木板盖掉所有的湿地,露出所有的草地。每块木板的宽度为1,长度为任意长。问FJ最少用几块木板就可以完成任务?思路:匈牙利算法的最小点覆盖。将每行所含有的每一段做为一侧的点,将每列所含有的每一段作为另一侧的点,就是对每一段'*'赋给一个新的x,y坐标,使得不同的段x,y不同。#i

2016-03-19 18:26:24 286

原创 hdu 1532 Drainage Ditches(EK算法)

输入m n, m是边数,n是点数。 接下来m行: 起点,终点,最大流量。求以 1 为源点, n为汇点的最大流。裸的最大流算法#include #include #include #include #include #include #include #include #include #include #include #include us

2016-03-17 20:04:30 465

原创 Codeforces 292D (并查集巧妙运用)

题意:一个无向图,给出m条边,有k次询问,每次询问将第l到r条边暂时删去,求这时候有多少个连通分量。思路;首先预处理,分别从前往后和从后往前合并,从前往后的并查集用s[i]表示,代表从第1条边到第i条边的并查集,从后往前用l[i]表示,代表从第i条边到第m条边的并查集;每次询问,要将两个并查集合并,然后再求出连通分量的个数。#include #include #include

2016-03-17 11:23:49 1180

原创 coderforce 510c Fox And Names(两种写法)

就是道裸的拓扑排序,两种方法。DFS:#include #include #include #include #include #include #include #include #include #include #include #include using namespace std;#define INF 0x3f3f3f3fint n;char

2016-03-15 21:45:19 707

原创 codeforces 468B Two Sets

题目大意:给你N个互不相同的整数,再给两个整数a,b,问能否把这N个数分成两部分,使得在a这个集合中的任一个数ai,都存在a-ai也在a 这个集合中,对b集合也同理。如果不存在一种合理分法,输出No,否则输出YES,并输出任一种合理分组。解题思路:1,map映射,使得查找成对的数字查找更方便。2,虚拟出两个a,b集合的根结点n+1和n+2;3,并查集的特殊处理;

2016-03-13 17:42:58 564

原创 hdu 5546 Ancient Go(★)

题意: 有两个人在一个9*9的棋盘里下棋,A 是的棋子为x , B为 o  ,“.”  的意思为空。 问 A的下一个 能否将 B 的棋子杀死, (跟围棋差不多)。解题大意: dfs  判联通块的周围是否只有 一个 ‘ . ’. #include#include#includeusing namespace std;char ma[10][10];int vis[10][10]

2016-03-12 20:11:53 495

原创 codeforces 369C Valera and Elections

题目描述n个节点和n - 1条双向边组成了一棵树。这些边分为两种,一种类型为1,一种类型为2,类型为2的边需要维修。当我们选中一个节点x时,节点x到节点1路径上的所有类型为2的边都会被维修。我们需要找到n个节点的一个子集,满足 子集中个数最少,并且所有类型为2的边都得到维修分析由于输入只是两点相连,并没有说明是父子关系,所以首先搜索处理出树的结构,标记需要处理的节点

2016-03-12 19:08:26 702

原创 Codeforces 429 A. Xor-tree

题目意思:给一颗n个节点的树,每个节点有一个值要么是0要么是1,改变某个节点的值时,它的儿子不变,它儿子的儿子翻转,它儿子的儿子的儿子不变,如此类推。给定各个节点的目标值,求最少的翻转次数,使得达到要求。题解思路:先建树,然后从根节点开始dfs,维护一个从根传过来的奇数层改变的次数,从根传过来的偶数层改变的次数,根据当前节点所在层的奇偶性以及原始值和目标值的差异,判断该节点

2016-03-12 18:27:18 907

原创 CodeForce 377 A mazes (逆向思维)

题意:给一个n*m的矩阵,#代表墙,.代表通路,给一个k值,代表需要你将矩阵中k个通路改为X,但是要保证剩下的点依然联通,然后输出改变有的矩阵。分析:因为原图是连通的,我们队原图进行递归深搜,从深搜树的底部开始往上删除结点,直至k等于0,这样既达到了删除k个节点也保证了剩余的节点连续。#include #include #include #include #

2016-03-12 17:50:14 505

原创 Codeforces 354C. Vasya and Beautiful (★)

题目大意:给出一个数组,每个元素最多减少k,问能够调整出的整个序列的最大的gcd是多少。题目分析:容易想到我们可能得到的答案的上限就是maxi=1na[i][Math Processing Error].因为通过减k,一定能够调整为k+1的倍数,所以下限是k+1如果枚举答案,最坏依旧要枚举n次,所以我们如何能够快速判断当前答案是否正确呢?我们可以知道每个数一

2016-03-05 16:42:00 601

空空如也

空空如也

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

TA关注的人

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