5-6月题目汇总(5.30---6.4)

5.30晚

NO.1 来源 : BZOJ 2342 [Shoi2011]双倍回文

分类: 回文,Manachar

简要题解:

  • 先用Manachar求出 f(i) ,令 p(i) 表示以 i,i+1 中间为对称轴能延伸的最长长度,也就是 s[ip(i)]=s[i+1+p(i)] ,显然 p(i)=f(i2+1)12
  • 枚举中心 x ,如果 x<y(x+p(x)2) 并且 yp(y)x 那么一定有一个关于 xx+1 中间对称的,长度为 (yx)4 的双回文串。
  • y 的第二个条件可以用排序+按顺序加入讨论来保证。第一个条件用一个set维护。时间复杂度 O(logn) .
  • 貌似有大神用的并查集,可是蒟蒻并不会。

反思:

  • Manachar 可以很灵活的变形,求出其他和回文串中心有关的长度值。
  • 重点关注满足哪些条件就可以更新答案和怎么维护这些条件。

5.31上午

NO.2 来源 : BZOJ 4213 贪吃蛇

分类: 上下界网络流

简要题解:

  • 被环状蛇覆盖的格子与两个格子相连,非环状蛇除了头尾只与一个格子相连之外,其他格子也与两个格子相连。
  • 对网格进行黑白染色,环状蛇的头和尾一定在不同颜色的格子里。
  • S,cap=2,cost=0 (限制流量恰好为2)
    T,cap=2,cost=0 (限制流量恰好为2)
    ,cap=1,cost=0
  • 环状蛇只会转化成上面几种边,所以不会产生任何费用。
    特别的, Tcap=1,cost=1
    非环状蛇的头尾都会经过一条上面这种边,所以对答案的贡献是2.

反思:

  • 把网格问题转化成网络流问题的常用途径就是染色(标号)法。
  • 满足要求的情形有哪些类?一个一个想清楚。

5.31上午

NO.3 来源 4755: [Jsoi2016]扭动的回文串

分类: Manacher,Hash

简要题解:

  • 先对两个串跑一遍Manacher,求出 f(i),g(i) ,令 ans=max(f(i)1,g(i)1))
  • 现在考虑连接而成的串。枚举回文中心,显然先在当前串上扩展到最长 l,r ,再看 l1,r+1 两个方向最多能扩展多少,这个显然可以二分+Hash判定。时间复杂度 O(nlogn)

反思:

  • Manacher要注意原始串和扩展后的串的对应关系,注意会回文区间的开闭。
  • 判定子串相等用Hash。

5.31上午

NO.4 来源 BZOJ 3243 [Noi2013]向量内积

分类: 线性代数,随机

简要题解:

  • 把输入看成 nd 的矩阵 A ,令 B=AAT ,那么 Bi,j 表示的就是 vi,vj 的点积。
  • 考虑 k=2 的情况,也就是要看有没有 Bi,j=0 ,等价于判断 B 是否等于全1矩阵。判断两个矩阵相等的经典方法是随机枚举向量,分别乘积,检查结果是否相等。
  • 对于 k=3 注意到 221 (mod 3) ,考虑点积的平方。
    (i=1daibi )2=(i=1daibi )(j=1dajbj )=i=1dj=1daiajbibj
  • 重新构造一个 nd2 的矩阵 C,Ci,j(d1)+k=Ai,jAi,k ,这就转化为 k=2 的情形了。

反思:

  • 向量、矩阵都是线性代数的内容,很多东西是可以相通的。
  • 判断两个矩阵相等。

5.31上午

NO.5 来源 不知道是哪里的集训题: 树上计算

分类: 树链剖分,树上乱搞

简要题解:

  • 一些约定: size(x) 表示子树大小, scnt(x),gcnt(x) 分别表示 x 的儿子、儿子和孙子的数量。 sum(x) 表示 x 子树的权值和。
  • 直接维护每个点的答案 f(x) ,对一个点 x 的修改 +d ,影响的是他的儿子和孙子,以及他到根的祖先点。
    • 对于孙子节点 v,Δf(v)=d(size(v)+1)
    • 对于儿子节点 v,Δf(v)=d(2+size(v)scnt(v))
    • 对于 x,Δf(x)=d(2+size(x)gcnt(x)fa(v)=xsize(v)scnt(v) )
      其中令 g(v)=fa(v)=xsize(v)scnt(v) 是可以预处理的。
  • 对于以上三种,都可以只在修改的时候打标记,询问的时候考虑一下 fa(x),fa(fa(x)) 的影响就可以了。
  • 对于 x 的祖先节点 v ,令 y 表示 vx 路径上的第一个点, Δf(v)=d(gcnt(x)+1)(size(v)size(y)) 。考虑轻重链剖分,重链上用线段树维护 gcnt(x)+1 ,修改的时候线段树上修改这个点,同时,向上跳轻链的时候修改 f(fa(top[x])) .

反思:

  • 注意到影响那些点之后,要考虑哪些是一类的变化,用什么维护。

你可能感兴趣的:(思维趣题)