• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
AC_Artist.zig_zag
然而我依然在补题、
博客园    首页    新随笔    联系   管理    订阅  订阅
上一页 1 ··· 3 4 5 6 7 8 9 下一页
2013年4月7日
bzoj 2434 阿狸的打字机
摘要: 好久没写AC自动机了,学了SAM以后发现对AC自动机的理解也加深了,其实它们的精髓都是用后缀的前缀来处理字串(后缀数组也是)。 那么这个题光会写AC自动机可不行,还要会处理询问。这个题询问第x个串在第y个串中出现的次数,于是我们可以想到把所有串建AC自动机,然后利用fail指针的性质:沿着fail指针上溯,所经过的都是以当前节点为右端点的字串,也就是说fail[i]代表的字串在i中一定出现过。所以我们把fail边反向,出现了一颗fail树,那么如果一个串在P位置上出现了,那么在它的所有儿子中一定也出现了,于是可以用树状数组维护这棵fail树的dfs序来维护答案。 方法是:按照一开始建A... 阅读全文
posted @ 2013-04-07 22:41 Zig_zag 阅读(305) 评论(0) 推荐(0)
后缀自动机入门
摘要: 前几天被substr虐了,于是怒而学后缀自动机,结果看了一下午没看懂,囧.......昨天总算是看出点端倪了,发现写起来还是挺短的,起码比后缀数组好写多了~!原理什么的CLJ大神的课件里讲的已经很细致了,比网上的一些讲的都要透彻,建议初次学习的话还是去看这个。其实一个后缀自动机里的点代表的不光是它自己,还包括所有以它为右端点的字串(曾经的后缀),那么后缀自动机上就可以处理一些字串以及后缀的问题了。它的时空复杂度都是O(n)的,所以可以非常有效地解决一些字符串问题。这个图可以非常直观地表现后缀自动机的神奇之处:1.0 NSUBSTR 这个题用后缀自动机做真是一目了然啊,写完才60行....... 阅读全文
posted @ 2013-04-07 08:20 Zig_zag 阅读(1718) 评论(0) 推荐(0)
2013年4月2日
Spoj 1825 Freetour2
摘要: 点分治第二题,分治过程写的比较熟练了,但搞答案的时候还是想了好久,写了好久.......主要解释一下求g的那块吧:首先dep[i]表示rot的第i个儿子的子树里黑点最多的路径的的黑点数。黑点限制是K,我们可以求出rot的每一个儿子i黑点数为j的最大长度g[i,j],然后每次求出一个j1+j2<=K,且g[i1,j1]+g[i2,j2]最大的。如果我们枚举i2,那么只需要求出一个可以和i2配并且最长的i1就行了。这个可以用个什么数据结构维护,也可以“暴力”。由于顺序是对答案没有影响的,那么我们按照dep升序排序,然后按照这个顺序计算,mg[j]表示前i个点的g[j]的最大值,如果维护好mg 阅读全文
posted @ 2013-04-02 10:18 Zig_zag 阅读(193) 评论(0) 推荐(0)
2013年4月1日
Poj 1741 Tree
摘要: 据说是传说中的男人八题之一,其实是点分治的练手题......不过第一次写调起来还是比较恶心的。话说QZC的论文我是完全没有看懂,上网找了一份代码看看才有点思路。树分治算法大致要分成几个过程:预处理->分治{分割,计算答案,递归处理子树}就是这样了。但实际写起来却要写各种dfs和bfs,但这种东西点双边双写多了就不会出什么错了,我在find计算答案那块调了好久,后来发现dis的下标应该是队列的标记,而不是某个点。我写的点分治,主过程是solve,递归地solve下去:每次先choose一个重心,然后计算这颗树里所有答案(就是计算出每个点到根的距离然后判断即可),然后减去路径不经过根的答案( 阅读全文
posted @ 2013-04-01 18:25 Zig_zag 阅读(315) 评论(0) 推荐(0)
2013年3月28日
bzoj 1486 最小圈
摘要: 分数规划,搜索参数P,把边权调整成val-p,然后找负环,如果存在负环说明答案可行并且还存在更优解,搜到精度满足即可。minhoop 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cstring> 5 #include<cmath> 6 #define maxn 10000 7 #define maxm 50000 8 using namespace std; 9 struct et10 {11 int s,t,next;12 doub 阅读全文
posted @ 2013-03-28 23:05 Zig_zag 阅读(250) 评论(0) 推荐(0)
Poj 2728 DK
摘要: 最优比率生成树,参数搜索。建议去这里http://wenku.baidu.com/view/87ecda38376baf1ffc4fad25.html看看。我写的二分比较奇葩,精度调起来比较疼,弄到1e-6就ok了。View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cmath> 5 #include<cstring> 6 #define maxn 1024 7 #define inf 2147483646 8 using 阅读全文
posted @ 2013-03-28 23:02 Zig_zag 阅读(222) 评论(0) 推荐(0)
bzoj 2809 dispatching
摘要: 一开始没想出来,想大概需要维护一下工资单调递增然后求和什么的,后来一查发现是splay启发式合并,于是我赶紧先去做了一下Neverland那个题,发下什么启发式合并其实就是暴力合并......表示无奈。这个题居然这么轻松就写过了,而且还是1A,代码居然比Neverland还短......就是维护一下sum工资和就行了,查找的话类比寻找第k小的数。dispatching 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cstring> 5 #inclu 阅读全文
posted @ 2013-03-28 22:55 Zig_zag 阅读(229) 评论(0) 推荐(0)
bzoj 2733 永无岛
摘要: 裸的splay启发式合并,其实就是用队列实现的暴力合并,轻松写过~Neverland 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cstring> 5 #include<cmath> 6 #define maxn 200000 7 using namespace std; 8 9 int c[maxn][2]; 10 int fa[maxn],f[maxn],rank[maxn],size[maxn],q[maxn]; 11 int 阅读全文
posted @ 2013-03-28 22:52 Zig_zag 阅读(218) 评论(0) 推荐(0)
bzoj 2209 括号匹配
摘要: 我们把左右括号用-1和1来替代,那么两个不同的括号可以相互抵消,但必须保证是闭合的"()",而不是扩散的")(",这样我们维护一下左右的最小最大值,那么最小值就是孤单左括号的,最大值就是孤单右括号的数目,答案就是(|左小|+右大)/2+(|左小|+右大)%2。注意取反和翻转的不同,需要用不同的方式来维护以上4个值。brackets 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cmath> 5 #includ 阅读全文
posted @ 2013-03-28 22:51 Zig_zag 阅读(407) 评论(0) 推荐(0)
bzoj 1014 火星人
摘要: 比较字符串?不好处理?我们想到用哈希来比较。每个节点记录它包括它的子树所表示的字符串的哈希值,这样我们可以通过二分长度,旋转出区间来判定。对于哈希值我们不必取特定的模数,只要让它乘爆就行,int就是模数。过程想清楚了就很好写了。prefix 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cmath> 5 #include<cstring> 6 #define maxn 240000 7 #define inf 2147483647 8 阅读全文
posted @ 2013-03-28 22:46 Zig_zag 阅读(362) 评论(0) 推荐(0)
上一页 1 ··· 3 4 5 6 7 8 9 下一页
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3