PROBLEM LINK:

Practice
Contest

Author: admin
Tester: Kevin Atienza
Editorialist: Ajay K. Verma
Russian Translator: Sergey Kulik
Mandarian Translator: Gedi Zheng

DIFFICULTY:

Medium

PREREQUISITES:

Combinatorics, Modular Arithmetic

PROBLEM:

Given two integers $N$ and $K$, find how many triplets of strings over $K$ alphabets exist, such that length of all strings is bounded by $N$, and no string in a triplet is a prefix of another string of the triplet.

EXPLANATION:

We compute the number of triplets of strings of bounded length, and then subtract the ones in which one string is a prefix of another. For the sake of brevity, we define a new notation $\prec$ to represent the "prefix" relationship, i.e., "$X$ is a prefix of $Y$" can be represented by $X \prec Y$.

Total Number of Triplets:

There are exactly $K^i$ strings of length $i$. Hence, the number of strings with length not exceeding $N$ will be:
$A = K + K^2 + K^3 + \cdots + K^N$
$A = K (K^N - 1 / (K - 1))$

If the modular inverse of $(K - 1)$ with respect to the given prime $p = 10^9 + 7$ is $x$, then the value of $A \bmod p$ would be $(K (K^N - 1) x) \bmod p$.

Both the modular inverse, and power of a number can be compute in $O (\log N)$ time. Hence, we can compute the value of $A$ in $O (\log N)$ time.

There are $A$ strings of length not exceeding $N$. Therefore, the number of triplets would be $A^3$. Next, we count how many of these triplets are bad triplets, i.e., the ones in which one string is a prefix of another.

Triplets of the Form $X \prec Y \prec Z$:

In this section we count the number of triplets which have strings forming a chain under the relationship $\prec$, i.e., if the triplet is $(P, Q, R)$, then one of the following is true:
$P \prec Q \prec R$
$P \prec R \prec Q$ 
$Q \prec P \prec R$
$Q \prec R \prec P$ 
$R \prec P \prec Q$
$R \prec Q \prec P$

Note that for some triplets more than one of these conditions might be true, e.g., $(X, X, X)$ will satisfy all $6$ conditions. Hence, we consider four categories, so that each triplet is counted exactly once.

1) $X = Y = Z$:
There will be $A$ triplets of this form, as we can choose the string $X$ in $A$ ways, and the other two will be equal to it. These triplets will satisfy all $6$ conditions, i.e., each triplet will be repeated $6$ times.

2) $X \prec Y = Z$ and $X \neq Y$:
For a given string $Y$ of length $r$, there are exactly $(r - 1)$ possible values of string $X$, the ones which are proper substring of $Y$. Hence, the number of such triplets would be:
$K^2 + 2 K^3 + 3 K^4 + \cdots + (N - 1) K^N$.

This is the sum of an arithmetic-geometric series, and can be represented explicitly as shown here. The computation of this sum also requires the computation of power and modular inverse, and hence can be done in $O (\log N)$ time.

These triplets will satisfy two of the above conditions ($X \prec Y \prec Z$, and $X \prec Z \prec Y$).

3) $X = Y \prec Z$, and $Y \neq Z$:
Number of these triplets will be the same as the one computed in (2). This is because once we pick a string $Z$ of length $r$, then $Y$ has exactly $(r - 1)$ choices.

These triplets also satisfy two of the above conditions ($X \prec Y \prec Z$, and $Y \prec X \prec Z$).

4) $X \prec Y \prec Z$, $X \neq Y$, and $Y \neq Z$:
If we pick a string $Z$ of length $r$, then we only need to choose the lengths of $X$ and $Y$. The lengths of $X$ and $Y$ must be distinct and lie between $1$ and $(r - 1)$. Hence, the number of $(X, Y)$ pairs would be the number of ways of choosing two distinct numbers between $1$ and $(r - 1)$, which is given by $(r - 1) \choose 2$. Therefore the number of such triplets would be:
$K^3 + 3 K^4 + 6 K^5 + \cdots + {{N - 1} \choose 2} K^N$

Again this is the sum of arithmetic-geometric sequence of second order, and can be computed using the similar methods. The computation will take $O (\log N)$ time.

These triplets will satisfy exactly one of the above conditions.

Hence, the number of chain triplets would be $6$ ((number of category 1 triplets)/$6$ + (number of category 2 triplets)/$2$ + (number of category 3 triplets)/$2$ + (number of category 4 triplets)/$1$).

Triplets of the Form "$X \prec Y$, $Z$ does not share prefix relationship with $Y$":

In this section we count the number of triplets in which exactly two strings satisfy the "prefix" relationship, i.e., if the triplet is $(P, Q, R)$, then one of the following is true:
$P \prec Q$, $R$ has no prefix relation with $Q$,
$Q \prec P$, $R$ has no prefix relation with $P$,
$P \prec R$, $Q$ has no prefix relation with $R$,
$R \prec P$, $Q$ has no prefix relation with $P$,
$Q \prec R$, $P$ has no prefix relation with $R$,
$R \prec Q$, $P$ has no prefix relation with $Q$,

Once again it is possible that one triplet satisfy more than one condition, however, we should count it only once.

1) $X = Y$, $Z$ has no prefix relation with $Y$: 
If we have a string $Y$ of length $r$, then there are exactly $r$ prefix strings of $Y$. If a string $W$ has $Y$ as a proper prefix, then $W$ can be written as $W = Y + U$, where $U$ is a non-empty string of length at most $(N - r)$. Hence, the number of such string $W$ will be $K + K^2 + \cdots + K^{N - r}$. Since $Z$ is neither a prefix of $Y$, nor has $Y$ as its prefix, the number of possible values of $Z$ would be:
$(K + K^2 + \cdots + K^N) - (K + K^2 + \cdots + K^{N - r}) - r$
$= (K^{N - r + 1} + K^{N - r + 2} + \cdots + K^N - r)$.

Also number of ways of choosing a $r$ length string $Y$ is $K^r$. Hence, the number of such triplets $(X, Y, Z)$, with $Y$ being a $r$-length string will be:
$K^r (K^{N - r + 1} + K^{N - r + 2} + \cdots + K^N - r)$
$= K^{N + 1} * (1 + K + K^2 + \cdots + K^{r - 1}) - r * K^r$

If we take the sum of this expression over all possible values of $r$, we get the number of triplets $(X, Y, Z)$ satisfying the above criteria, and it will be:
$K^{N + 1} (N + (N - 1) K + (N - 2) K^2 + \cdots + K^{N - 1}) - (K + 2 K^2 + 3 K^3 + \cdots + N K^N)$

This is also a sum of arithmetic-geometric sequence, and can be computed in logarithmic time. These triplets satisfy two of the above conditions ($X \prec Y$, with $Z$ having no relationship, and $Y \prec X$, with $Z$ having no relationship).

2) $X \prec Y$, $X \neq Y$, and $Z$ has no prefix relation with $Y$:
Once again if we pick a string $Y$ of length $r$, then $X$ will have $(r - 1)$ choices, and Z will have $(K^{N - r + 1} + K^{N - r + 2} + \cdots + K^N - r)$ choices. Hence, the number of such triplets with $Y$ being of length $r$ would be:

$r K^r (K^{N - r + 1} + K^{N - r + 2} + \cdots + K^N - r)$
$= r K^{N + 1} (1 + K + K^2 + \cdots + K^{r - 1}) - r^2 K^r $

If we sum it over all possible values of $r$, we would get the number of triplets $(X, Y, Z)$ satisfying the above condition, which would be (after some simplifications):

${(N + 1) \choose 2} K^{N + 1} (1 + K + K^2 + \cdots + K^N) - K^{N + 1} ({2 \choose 2} K + {3 \choose 2} K^2 + \cdots + {N \choose 2} K^{N - 1})$
$ - (1^2 K + 2^2 K^2 + 3^2 K^3 + \cdots + N^2 K^N)$.

The number of triplets where exactly two strings satisfy the "prefix" relationship will be $6$ ( (number of triplets of first category)/$2$ + (number of triplets of second category)/$1$).

Now that we have computed the number of bad triplets, we can subtract them from the total number of triplets to get the number of good ones.

Time Complexity:

$O (\log N)$

AUTHOR'S AND TESTER'S SOLUTIONS:

Author's solution will be put up soon.
Tester's solution will be put up soon.

editorial-render A的更多相关文章

  1. React.render和reactDom.render的区别

    刚开始学习react.js.发现网上的资料,有些是写着react.render,有些写着reactDom.render.觉得很奇怪就查阅了一下资料.解释如下: 这个是react最新版api,也就是0. ...

  2. XF custom render 各平台实现类

    目前的XF还是非常简陋的,所以存在大量的自定义工作.一般情况下我们只是要需要派生原生的XF控件,然后在各平台下修改其呈现方法. 所以了解每个XF控件在不同平台上呈现使用的控件类是有所必须要的.以下别人 ...

  3. 塞翁失马,焉知非福:由 Styles.Render 所引发 runAllManagedModulesForAllRequests="true" 的思考

    最近在使用 MVC 开发的时候,遇到一个对我来说"奇怪的问题",就是使用 BundleTable 进行 CSS.JS 文件绑定,然后使用 Styles.Render.Scripts ...

  4. ReactJS分析之入口函数render

    前言 在使用React进行构建应用时,我们总会有一个步骤将组建或者虚拟DOM元素渲染到真实的DOM上,将任务交给浏览器,进而进行layout和paint等步骤,这个函数就是React.render() ...

  5. Cesium原理篇:6 Render模块(3: Shader)

    在介绍Renderer的第一篇,我就提到WebGL1.0对应的是OpenGL ES2.0,也就是可编程渲染管线.之所以单独强调这一点,算是为本篇埋下一个伏笔.通过前两篇,我们介绍了VBO和Textur ...

  6. Cesium原理篇:6 Render模块(4: FBO)

    Cesium不仅仅提供了FBO,也就是Framebuffer类,而且整个渲染过程都是在FBO中进行的.FBO,中文就是帧缓冲区,通常都属于高级用法,但其实,如果你了解了它的基本原理后,用起来还是很简单 ...

  7. Cesium原理篇:6 Render模块(5: VAO&RenderState&Command)

    VAO VAO(Vertext Array Object),中文是顶点数组对象.之前在<Buffer>一文中,我们介绍了Cesium如何创建VBO的过程,而VAO可以简单的认为是基于VBO ...

  8. render :template 和 render :parital

    1 .这两个都可以在controller和view中使用,而且好像可以替换,只是用:template,rails不会自动加下划线,用:partial,rails会自动添加下划线.而且规范的做法,:te ...

  9. AngularJs中,如何在render完成之后,执行Js脚本

    AngularJs是Google开源的前端JS框架.使用AngularJs, 我们能够容易地.健壮的开发出类似于Gmail一样的单页Web应用.AngularJs这个新兴的MVC前端框架,具有以下特点 ...

  10. 利用Render Texture实现游戏的小雷达效果(摄影机分屏)

    最近游戏蛮牛在举办一个活动,就是要做出这样的效果: 题目:实现游戏分屏效果 要求:1.        分屏,且分割线不规则(即非水平或垂直):2.        各屏可单独操作(移动.缩放),操作指该 ...

随机推荐

  1. angular的DEMO(用来练习和顺便看看)

    inflector(辅助) 将用户输入的字符串转化成驼峰或者空格或者底线的小插件; 这个是一个小的过滤器, 平常也是用不到的, 合格是过滤器的代码: app.filter("inflecto ...

  2. Daily Scrum – 1/18

    Meeting Minutes 完成了User Course, 与 Tips 的设计; 修复了一系列Bug; 完成了夜间模式: Burndown Progress part 组员 今日工作 Time ...

  3. 【转】document.documentElement和document.body的区别

    转自:http://www.cnblogs.com/ckmouse/archive/2012/01/30/2332070.html 网页中获取滚动条卷去部分的高度,可以通过 document.body ...

  4. nginx下禁止访问robots.txt的设置方法

    关于robots.txt文件:搜索引擎通过一种程序robot(又称spider),自动访问互联网上的网页并获取网页信 息.您可以在您的网站中创建一个纯文本文件robots.txt,在这个文件中声明该网 ...

  5. java.lang.NoClassDefFoundError: org/jaxen/JaxenException

    今天想要解析 xml 文件,查了下,解析xml 的可以用:jdom 或者 dom4j 使用dom4j 来选用某一个指定元素的时候,如 List<Element> childElements ...

  6. Maven-本地安装

    本文测试安装maven3     安装 Maven 之前要求先确定你的 JDK 已经安装配置完成.Maven是 Apache 下的一个项目,目前最新版本是 3.0.4,我用的也是这个. 首先去官网下载 ...

  7. Spring-事物传播行为

    spring事物的传播属性(7种) REQUIRED(默认) 业务方法需要在一个容器里运行.如果方法运行时,已经处在一个事务中,那么加入到这个事务,否则自己新建一个新的事务. 存在事物,则使用当前事物 ...

  8. groovy-语句

    groovy语句类似于java语句,但是在groovy中的分号”;”是可选的.比如: 1 def x = [1, 2, 3] 2 println x 3 def y = 5; def x = y +  ...

  9. boost构造,解析json

    void asynDBCenter::isGetActorInfoEx(void* on_process, const char* arg) { std::stringstream ros(arg); ...

  10. c/s架构nginx+php-fpm通信原理

        FastCGI是一个运用于Http Server和动态脚本语言间通信的接口,多数流行的Http Server都支持FastCGI,包括Apache.Nginx和lighttpd等.同时,Fas ...