子串查询

Accepts: 1262

Submissions: 5335

Time Limit: 3500/3000 MS (Java/Others)

Memory Limit: 262144/262144 K (Java/Others)

Problem Description

度度熊的字符串课堂开始了!要以像度度熊一样的天才为目标,努力奋斗哦!

为了检验你是否具备不听课的资质,度度熊准备了一个只包含大写英文字母的字符串 A[1,n] = a_1 a_2 \cdots a_nA[1,n]=a​1​​a​2​​⋯an​​,接下来他会向你提出 qq 个问题 (l,r)(l,r),你需要回答字符串 A[l,r] = a_l a_{l+1} \cdots a_rA[l,r]=al​​al+1​​⋯ar​​ 内有多少个非空子串是 A[l,r]A[l,r] 的所有非空子串中字典序最小的。这里的非空子串是字符串中由至少一个位置连续的字符组成的子序列,两个子串是不同的当且仅当这两个子串内容不完全相同或者出现在不同的位置。

记 |S|∣S∣ 为字符串 SS 的长度,对于两个字符串 SS 和 TT ,定义 SS 的字典序比 TT 小,当且仅当存在非负整数 k(\leq \min(|S|,|T|))k(≤min(∣S∣,∣T∣)) 使得 SS 的前 kk 个字符与 TT 的前 kk 个字符对应相同,并且要么满足 |S| = k∣S∣=k 且 |T| > k∣T∣>k,要么满足 k < \min(|S|,|T|)k<min(∣S∣,∣T∣) 且 SS 的第 k+1k+1 个字符比 TT 的第 k+1k+1 个字符小。例如 "AA" 的字典序比 "AAA" 小,"AB" 的字典序比 "BA" 小。

Input

第一行包含一个整数 TT,表示有 TT 组测试数据。

接下来依次描述 TT 组测试数据。对于每组测试数据:

第一行包含两个整数 nn 和 qq,表示字符串的长度以及询问的次数。

第二行包含一个长为 nn 的只包含大写英文字母的字符串 A[1,n]A[1,n]。

接下来 qq 行,每行包含两个整数 l_i,r_ili​​,ri​​,表示第 ii 次询问的参数。

保证 1 \leq T \leq 101≤T≤10,1 \leq n,q \leq 10^51≤n,q≤10​5​​,1 \leq l_i \leq r_i \leq n1≤li​​≤ri​​≤n

Output

对于每组测试数据,先输出一行信息 "Case #x:"(不含引号),其中 x 表示这是第 xx 组测试数据,接下来 qq 行,每行包含一个整数,表示字符串 A[l,r]A[l,r] 中字典序最小的子串个数,行末不要有多余空格。

Sample Input

1
2 3
AB
1 1
1 2
2 2

Sample Output

Copy

Case #1:
1
1
1

前缀字母A~Z的个数,复杂度(O(n))

#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <queue>
#include <map>
#include <set>
#include <stack>
#define fora(i,a,b) for(i=a;i<b;i++)
#define fors(i,a,b) for(i=a;i>b;i--)
#define fora2(i,a,b) for(i=a;i<=b;i++)
#define fors2(i,a,b) for(i=a;i>=b;i--)
#define PI acos(-1.0)
#define eps 1e-6
#define INF 0x3f3f3f3ftypedef long long LL;
typedef long long LD;
using namespace std;
const int maxn=1e5+11;
char str[maxn];
int qz[maxn][33];
int main()
{int T,t=0,len;scanf("%d",&T);while(T--){int n,q;scanf("%d%d%s",&n,&q,str);int i,j;len=strlen(str);fora(i,0,len){fora(j,0,26){qz[i+1][j]=qz[i][j];}qz[i+1][str[i]-'A']++;}printf("Case #%d:\n",++t);while(q--){int L,R;scanf("%d%d",&L,&R);fora(i,0,26){//printf("****%c %d %d\n",i+'A',qz[R+1][i],qz[L][i]);if(qz[R][i]-qz[L-1][i]>0){printf("%d\n",qz[R][i]-qz[L-1][i]);break;}}}}return 0;
}

转载于:https://www.cnblogs.com/107acm/p/9428305.html

2018百度之星程序设计大赛 - 资格赛 1002 子串查询相关推荐

  1. 2018百度之星程序设计大赛-资格赛P1002子串查询(前缀和)

    因为过关要求貌似是随便A掉一道题,,,还实时给了AC率,不是摆明了让我挑最水的题写吗.. problem 给定一个字符串A[1,n]. 询问q次,A[l,r]内字典序最小的连续非空子串有多少次重复. ...

  2. 2018百度之星程序设计大赛 - 资格赛 hdu6345(找区间最小值)

    子串查询 Time Limit: 3500/3000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Sub ...

  3. 2018百度之星程序设计大赛资格赛(4道题的答案)

    目前是百度之星的资格赛比赛时间,写对一道题就可以进入后面的比赛了,我们初赛再见咯.明明昨天就上传该文章,可惜图片太多一直列为待审核,现在图片都删了,日后再来详细补充题目吧. ###调查问卷 #incl ...

  4. 2018百度之星程序设计大赛 - 资格赛 A B C E F

    1001 思路: 问题数m是不超过10的,所以我们对问题数 m 进行状态压缩,每个状态可以得到一些问题的集合,这些问题集合是属于这 m 个问题集合中的,并且不会重复的,所以我们根据每个状态可以得到 n ...

  5. 2018百度之星程序设计大赛 - 资格赛 P1006三原色图(MST,并查集)

    problem 给一张n个点m条边的有向图,每条边有一个正整数权值以及一种色光三原色红.绿.蓝之一的颜色. 恰好选出k条边,满足只用这k条边之中的红色边和绿色边(或者蓝色边和绿色边)就能使n个点之间两 ...

  6. 2018百度之星程序设计大赛 - 资格赛

    BB 好了我活了 这么长时间不写题就是会变菜啊 这种题写这么长时间QAQ T1 这个题刚看到的时候一脸mb 然后看到数据范围就放心了 就写了个子集枚举就交上去了 但是要注意的是最后统计答案的时候,是每 ...

  7. hdu6383(2018 “百度之星”程序设计大赛 - 初赛(B))

    p1m2 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Sub ...

  8. hdu6380(2018 “百度之星”程序设计大赛 - 初赛(B))

    degree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total S ...

  9. hdu6375(2018 “百度之星”程序设计大赛 - 初赛(A))

    度度熊学队列 Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total S ...

最新文章

  1. 麻省理工学院的牛人解说数学体系,你到哪个层次了?
  2. 使用ASV2011研究Molehill API
  3. open***配置成功分析(服务器)
  4. http://jsbeautifier.org/
  5. 谈EXPORT_SYMBOL使用
  6. TypeError: 'builtin_function_or_method' object has no attribute '__getitem__'的解决方法等
  7. 揭秘腾讯云最新音视频及融合通信技术实践
  8. caffe下matlab、python的配置和faster RCNN的运行
  9. Linux 编译pe,如何在PE中将PE(可移植可执行文件)格式转换为ELF
  10. AI框架中图层IR的分析
  11. c语言中去掉最小值,2020-07-12(C语言)从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删除元素的值。空出的位置由最后一个元素填补,若顺序表为空则显示出错信息并退出运行。...
  12. 发布Drools Workbench到Tomcat on Linux
  13. 【电商系统】—项目梳理(一)
  14. 解决VirtualBox无法安装增强工具
  15. 图中PNP型三极管发射极和基极为什么要加个100K(R21)的电阻?
  16. Caused by: java.lang.NoSuchMethodError:xxx——依赖冲突的解决
  17. Nikon Capture NX2.2.6下载及破解方法
  18. Nginx-rrd监控
  19. Android Battery(四) 电池管理
  20. Unity关于无法新建项目的可能解决办法

热门文章

  1. 多线程:管cheng法
  2. continue详细讲解
  3. oracle fs1 2多少u,甲骨文FS1系列闪存的“大道至简”
  4. python perl lisp,是否可能像python中的perl的lvalue或lisp的setf一样?
  5. java 主线程等待_Java实现主线程等待子线程
  6. 基本的排序算法php,php四种基础排序算法
  7. oracle去掉默认值sql,如何在T-SQL中删除默认值或类似约束?
  8. window10怎么卸载php,window_win10怎么卸载程序?win10卸载程序教程,当win10正式版发布以后,不少 - phpStudy...
  9. linux 运行eclipse,解决Linux下Eclipse启动错误
  10. 什么是写一个java类,Java什么是类?class的相关介绍