• CF1393E2(字符串)


    CF1393E2(字符串)

    题目大意

    有一些字典序不降的有序字符串,某大师给其中的一些字符串中加了恰好一个字符,你现在知道操作后的字符串数组,求原始字符串有多少种,(mod 10^9+7)

    数据范围

    (1 le n le 10^5,sum|S| le 10^6)

    解题思路

    首先是一个显然的 dp,(dp[x][y]) 表示第 x 串扔掉第 y 个字符且前 x 个串合法的方案数

    从前一个串的某个位置转移来,只需要求消掉字符以后字典序满足不降即可

    暴力做 + hash 二分判字典序大小是 (Theta(L^2log L))

    如果我们把所有串都排序,比较时用 hash二分 时间复杂度是 (Theta(Llog^2L)) 的,显然出题人卡了这个做法

    由于比较的是相邻两个串的字典序大小,如果求出来一个串内部的顺序,在归并排序一下就行了,因此我们考虑如何求出一个串去掉其中一个字符的字典序

    考虑所有字符都不相同的情况,对于 (i,j(i <j)) 的字典序,我们比较 (s[i],s[i+1]) 的大小即可,那么如果字符有相同的情况呢,那么也很简单,我们找到最近的不相同的字符来比较即可,由于他们之间还满足这样一种性质若 (rk[i] <rk[j] (i le j)) 那么 (rk[i] < rk[k](j le k)) ,最后再把整串加到删掉最后一个字符后面即可

    时间复杂度 (Theta(Llog L))

    代码(还没有)

  • 相关阅读:
    poj 2100 尺取法 一个数字拆成连续数字平方和
    poj 1011 dfs+剪枝
    CF-242-C bfs+stl
    hdu 1297 递推
    poj 2104 划分树模板
    poj 3842 全排列+筛素数+暴力
    hdu 1421 经典dp
    hdu 1069 最长上升子序列变形
    hdu 3496 二维费用的01背包
    nyoj 16 最长上升子序列变形
  • 原文地址:https://www.cnblogs.com/Hs-black/p/13472519.html
Copyright © 2020-2023  润新知