最新公告
  • 欢迎您光临信息学奥赛网,一个优质的信息学编程题库和信息学编程学习资源专业网站。欢迎加入VIP
  • 前缀和与后缀和

    正文概述 陈老师   2026-01-20 15:14:56  

    题目描述

    给定一个字符串 s=s1s2sss = s_{1}s_{2}\ldots s_{|s|},其中 s|s| 表示字符串 ss 的长度,sis_{i} 表示它的第 ii 个字符。

    我们引入以下几个定义:

    • 字符串 ss 的一个子串 s[i..j]s[i..j] (1ijs)(1 \leq i \leq j \leq |s|) 指的是字符串 sisi+1sjs_{i}s_{i+1}\ldots s_{j}
    • 字符串 ss 长度为 ll 的前缀(1ls)(1 \leq l \leq |s|)s[1..l]s[1..l]
    • 字符串 ss 长度为 ll 的后缀(1ls)(1 \leq l \leq |s|)s[sl+1..s]s[|s|-l+1..|s|]

    你的任务是,对于所有前缀等于后缀的长度 ll,输出它在字符串 ss 中作为子串出现的次数。

    输入格式

    一行,包括一个只由大写英文字母组成的字符串 ss (1s105)(1 \leq |s| \leq 10^{5})

    输出格式

    第一行输出一个整数 kk (0ks)(0 \leq k \leq |s|),表示有多少个前缀等于后缀。

    接下来 kk 行,每行输出两个整数 li cil_{i}\ c_{i},表示长度为 lil_{i} 的前缀与后缀相等,并且它在字符串 ss 中作为子串出现了 cic_{i} 次。请按照 lil_{i} 递增的顺序输出每组数据。

    样例

    ABACABA
    
    3
    1 4
    3 2
    7 1
    
    AAA
    
    3
    1 3
    2 2
    3 1
    
    信息学奥赛网,一个优质的信息学奥赛学习资源平台!
    信息学奥赛网 » 前缀和与后缀和