小花梨的字符串

  • Post author:
  • Post category:其他

题目描述

小花梨有一个长度为n且只包含小写字母的字符串。现在对其进行q次询问。
每次询问字符串的一段区间[l,r],从[l,r]区间内的所有子串中最多可以选出多少个字符串,使得选出来的这些字符串存在一种排列方式满足相邻的两个字符串a,b的最长公共后缀长度大于等于min(strlen(a),strlen(b))-1。

 

输入

第一行输入两个正整数n和q,分别表示字符串长度和询问次数。
第二行为长度为n的字符串。接下来q行,每行两个正整数l,r表示询问的区间。(1≤n≤10000,1≤q≤10000,1≤l≤r≤n)

 

输出

输出q行,第i行输出第i次询问的答案

 

样例输入

3 3
abc
1 1
1 2
1 3

样例输出

1
3
6

提示

[1,1]内有1个子串:a,存在排列a满足要求,长度为1
[1,2]内有3个子串:a,b,ab,存在排列a,ab,b满足要求,长度为3
[1,3]内有6个子串:a,b,c,ab,bc,abc,存在排列ab,b,c,bc,abc,a满足要求,长度为6

题目只是简单的考察字符串的子串有多少种

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
 
int main()
{
    int n,q;
    char x[10010];
    scanf("%d %d",&n,&q);
    getchar();
    scanf("%s",x);
    int a,b;
    for(int i=0;i<q;i++)
    {
        scanf("%d %d",&a,&b);
        printf("%d\n",(b-a+1)*(b-a+2)/2);
    }
    return 0;
}

 


版权声明:本文为weixin_44744037原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。