acm
文章平均质量分 54
qq_21704477
这个作者很懒,什么都没留下…
展开
-
后缀数组,高度数组
后缀数组:SA[i]表示字典序第i的后缀的开头字母的位置,比如abca,后缀有五个,abca,bca,ca,a,空后缀求后缀数组的方法是……类似分治法,类似二分法?首先求出每个后缀首字母的顺序,然后依据这个顺序求出每个后缀首两个字母开头的后缀的顺序,最后就能求出每个后缀的顺序具体实现上,参考挑战程序设计竞赛里给的(有更好的基数排序算法)int n,k;int rank[maxn原创 2016-02-15 09:20:51 · 446 阅读 · 0 评论 -
hihocoder 1252 2015北京赛区区域赛D
自己做的时候想用dp,123555个人广告推广和(宋阔打的)发现学习一个技能,如果考虑他的父节点是怎么来的,父节点的父节点之间会有干扰,不能满足无后效性百度说用最小割,想了一波不会,不知道怎么处理直接买这个技能这个这个这个这个模型不熟悉最小割啊,怎么能使 [ 每个割是一种可行的方法 ]呢 比如直接买最后一个点,应该是一个割,但是一个点只有两种到达方式1.由上面的点过来2翻译 2016-09-12 20:11:31 · 234 阅读 · 0 评论 -
HDU 5869 树状数组+GCD性质的利用
大连区域赛网络赛树状数组gcd的应用离线处理原创 2016-09-16 11:43:36 · 332 阅读 · 0 评论 -
HDU 5875 N^2能过的大水题,可用单调栈,离线处理优化
就是求A[L] MOD A[L+1] MOD A[L + 2] ….MOD A[R] 很容易想到mod的时候碰到大的数就可以不算,所以只要找到每个数右边第一个小于等于该数的数的位置就行了 这题太水了,N^2枚举就能过 当然这里可以用单调栈优化(复习一下) 维护一个单调递增的栈 碰到一个小于等于栈顶的数,就把大于这个数的数都出栈,同时记录到next数组里,o(n)时间就能算出来了 然后对于每原创 2016-09-16 17:59:36 · 199 阅读 · 0 评论 -
hdu 4022 multiset
要注意有重复点!好麻烦……开始自己的做法错了……用multiset保存点,然后访问过一个条边之后,把边上每个数都从从另一边剪掉,本身这条边也剪掉……详见http://www.cnblogs.com/wally/archive/2013/03/13/2958324.html转载 2016-08-25 11:34:32 · 206 阅读 · 0 评论 -
暑期赛B题 矩阵快速幂DP,注意状态的化简
题目:http://acm.xidian.edu.cn/problem.php?id=1180一看就感觉是矩阵快速幂的题,可是状态设计的太复杂不好转移,就崩了DP[I][J][K]表示考虑前i个珠子,最后一个的颜色是j,有k个,所能达成的方案数k = 1时 dp[i][j][k] = dp[i - 1][p][q] p!=j 1 k != 1时 dp[i][j][k原创 2016-08-27 09:43:51 · 399 阅读 · 0 评论 -
树链剖分学习
http://wenku.baidu.com/link?url=Mgj7EOkOlXg5PqU1fBosxe2yUOtAVVpvvPKW5m_m3h_bBdfXv8X-rJbNqM_YjC2Jp0geeJPsVpmym7-GSBHeVUXIP4zG66DI-FzpqbZSM2a 主要是根据这个网站看了看 感觉树链剖分有分治的思路吧,就是把边分成重边和轻边,从轻边走,剩下的点比较少,从重边走,可以原创 2016-09-19 20:57:06 · 171 阅读 · 0 评论 -
二维树状数组学习
http://blog.csdn.net/z309241990/article/details/9615259这个网站有实例,讲的不错以前很ZZ的以为二维树状数组就是树状数组存vector或者vector存树状数组做了那次网络赛之后知道有单点更新,矩阵查询的(LOGN)^2数据结构,其实就是树状数组里存了树状数组,比如x + lowbit(x) 总会存了x的信息。记: B[1]={a11,转载 2016-09-21 15:43:15 · 212 阅读 · 0 评论 -
最小生成树若干性质以及在ACM中的应用
感觉自己起了个很高级的名字,开心 1.POJ 2395 Out of Hay 好像是叫最小瓶颈生成树,要求生成树中的最大边最小。 其实最小生成树的最大边就是要求的值。 用反证法,首先假设最小生成树为T1,最大边为E1,另外一棵最大边更小的生成树为T2,最大边为E2。 如果E2 < E1,则T2中所有的边权值均小于E1,E1在T1中连接两个连通分量A,B,在T2中一定有连接A原创 2017-02-08 15:58:39 · 1934 阅读 · 2 评论 -
红色警报 16天梯赛决赛013
自己想到了并查集的做法,但是感觉好傻,就没有写。。 然后以为是求存不存在割点,跑去看割点的算法看了半天 其实用并查集也能过,然而最快的应该是DFS判断连通分量个数,题目的要求是判断去掉一个点之后图中是否有两个点不可达了,其实就是转换成连通分量个数变多,所以只要维护一个上一次的连通分量,然后和这一次的比较就行了……DFS巨水的题我居然都不会总结的话,是否会有两个点不可达可以转换成连通分量变多原创 2017-04-09 09:03:34 · 239 阅读 · 0 评论 -
hdu 4013树的最小表示
给定一个无根树,求他的子树的个数,子树也是无根树,边和点一一对应即为相等子树。枚举子集,这样就可以枚举出每种树的构成,然后枚举根节点,dfs求出最小表示来判重。注意,每一个子集如果是树的话,最多只能被计算一次,但是它的不同表示却都要放到set里(最小表示是对于确定根的)然后如果他是森林的话,由于枚举子集从小到大,他的每棵树都算过了,所以没有问题如果是在dfs中每一次都插入一次set原创 2016-09-12 16:24:21 · 261 阅读 · 0 评论 -
hdu 4031 问题分解+线段树+暴力
/*区间有两种情况如果区间值为1则区间内的数处于同一状态,为0则不属于同一状态,要再分 记录回复好的时间,如果查询时间》=这个时间,则区间继续属于回复状态,更新父亲节点值否则ans = ans + (R-L + 1)这种问题的复杂度不太好估计,最坏情况下要一直分下去,感觉复杂度没有那么好保障但是也能做吧上面想的做法应该不对233查了网上的做法……好像是N^2的算法啊不会做的原创 2016-08-31 15:13:30 · 238 阅读 · 0 评论 -
hdu 4034 预处理+map映射字符串
首先要注意输出时候有空格的问题,一行的最后一个空格不要输出!!切记!!我的做法就是前n次,每得到一组关系,即A和B是朋友就找到A的全部朋友,把B和他们的公共朋友数+1(A)因为每组关系只出现一次,即对于人C来说,如果他现在不是A的朋友,那么B和C现在不会加如果现在和A是朋友,那么现在会加一次,而以后不会出现A,C或者AB这个关系了,所以C,B有A这个公共朋友只会加这一次如果现在原创 2016-08-29 18:43:51 · 363 阅读 · 0 评论 -
CF div2 341-E
感觉自己太弱了……cf div2都只能做3题哈哈,下半年区域赛没有着落~ 这题看到就感觉变量很多,可能是因为前段时间做了数论的题,看到这题想用剩余定理;想通过找规律,发现循环节,每变化一次对模数的变化,来进行统计,问题在于1.可能没有规律2.可能还是要一种情况一种情况算看了答案之后发现,可以用矩阵优化的DP,真是厉害,因为比如前n个模x的值已知,*10之后再加一个原创 2016-02-17 20:52:00 · 346 阅读 · 0 评论 -
poj1509 最小表示法
1.起始问题 :比较两个字符串是否循环同构 比如说abca和caab是循环同构的(abca和acba不是循环同构)2.复杂度较高的算法 例举A串的所有循环同构串 和B串作比较:abca,bcaa,caab,aabc挨个和caab比一边 复杂度O(N^2) 能否优化到O(N)? kmp算法显然可以,但是kmp是针对匹配的,不是专原创 2016-02-14 15:05:51 · 1227 阅读 · 0 评论 -
la 4731 贪心+DP+概率
其实不要概率知识……题目给了公式开始其实就想到,大的应该放前面,不过还有如何划分等各个问题,所以没有敢直接下手证明分析了对于某一种划分方式,应该把那个组放在最前面(可证明 (∑P)/个数)最大的应该放在前面,这样可以使总值最小可是还是不知道怎么划分啊,划分的方法太多了,不适合做DP的条件假设每个算式中前面的系数已经给定(每组的个数,组的顺序已经给定) 那么怎么把各个区域填进去,能达原创 2016-04-07 21:42:06 · 593 阅读 · 0 评论 -
uva11795 简单状态压缩DP
一看到n = 16就想到状态压缩DP了,而且只要保存这个状态就行了转移时也用状态压缩的转移方法,比较两个二进制数,就能知道能否从已知状态转移到需要的状态开始没看到题目给的就是二进制数,自己还转换成了二进制还有要记得用longlong……不能因为这个wa还有位运算还不是很熟悉,可以用异或来去掉某一位数 S ^ (1#include#include#include#inclu原创 2016-04-09 10:22:38 · 289 阅读 · 0 评论 -
cf 346 D E
D 就是找到某一次走路方向和一下一次方向的关系,就可以判断会不会掉到水里。。小学生题E 开始考虑的方向是:如果某个点是被隔离的,那么他就全是出边,那么什么情况下这个点可以不被隔离呢?好像和有没有环有关系 对于每个连通分量,如果没有环,就是一棵树,随便选一个点为根,只有这个点是被隔离的(而且必须被隔离) 如果有环,环上绕一圈,以环上的点为跟出发到其他地方,每个点都没有被隔离然原创 2016-05-15 11:14:15 · 409 阅读 · 0 评论 -
HDU2437 2008 Asia Chengdu Regional Contest Online 记忆化搜索+剪枝
#includeusing namespace std;/*记录到达这一点%k的最小距离,如果当前距离》最小距离,就更新一下 算是记录状态的搜索,状态的描述方便剪枝*/ typedef long long ll;const int maxn = 1010;const ll INF = 1e18;struct edge{int to;int cost原创 2016-08-16 15:03:36 · 284 阅读 · 0 评论 -
hdu 2430 优先队列/线段树
1.我自己的想法是用线段树的考虑从i开头的字串,设sum[i,n] = x,sum[j,n] = y;要使得x mod p + y mod p 只要用线段树处理每个y的最小sum,就可以在logN时间内求出i开头的字串中的最大满足条件的值了今天Hdu关了,没交,感觉代码好丑。。可能会wa。。#includeusing namespace std;typedef long l原创 2016-08-17 11:21:34 · 286 阅读 · 0 评论 -
暑期赛c题 存储历史状态的树状数组+二分
http://acm.xidian.edu.cn/problem.php?id=1181开始以为是离线处理的……然后发现离线做不行,在线做不会啊就放弃了看了解题报告之后知道就是一个存储历史状态的树状数组,存储了以前时间的修改树状数组单点修改修改一个点会影响logn个点,这些点的vector都要更新一个新时间(因为是在线操作,时间是按顺序的)然后查找一个操作时间的时候,在进行sum的原创 2016-08-27 11:53:46 · 402 阅读 · 0 评论 -
dfs序,时间戳
上一篇文章讲了用DFS序来处理割点问题,DFS序表示的是进入的时间戳,用DFS序把之前访问的和之后访问的节点分开。而DFS序还有一个应用就是一个点的入DFS序和他子节点的最大入DFS序,构成了这个点为根的子树对应的区间 这样就可以在树上做区间更改了,树上的每个叶子在线段树上对应一个点,而树上的一棵子树在线段树上对应一个区间,所以要记录每个点的入DFS和出DFS,叶子结点的RDFS = CDFS,中原创 2017-04-09 11:24:35 · 1181 阅读 · 1 评论