子串查询

 Submissions: 12650
 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​​⋯a​n​​,接下来他会向你提出 qq 个问题 (l,r)(l,r),你需要回答字符串 A[l,r] = a_l a_{l+1} \cdots a_rA[l,r]=a​l​​a​l+1​​⋯a​r​​ 内有多少个非空子串是 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_il​i​​,r​i​​,表示第 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≤l​i​​≤r​i​​≤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

Case #1:
1
1
1

  

  这个题可以说是挺简单的了,就是自己一开始有一点蠢,写错了一点地方。

  这个题看着写的很复杂,其实很简单,求的是当前范围内字典序最小的一个字母在该范围内出现的次数。

  其实就是一个前缀和,类似下面这个题,可以帮助迅速理解这个题了。

    给定N个数a1 a2 a3 a4 … an

     求[L,R]范围内的和

   这个题也没有什么需要注意的地方,无非就是注意数组空间的大小,我们只要记下每一个位置之前的每一个字母出现的次数就可以了。

   

 1 #include<iostream>2 #include<string.h>3 using namespace std;4 typedef long long ll;5 char s[100050];6 int ans[27][100050], sum[100050];7 int n, q, a, b;8 int main(){9     int T, count=1;
10     cin >> T;
11     for(int k=1;k<=T;k++){
12         scanf("%d%d",&n,&q);
13         scanf("%s",s+1);
14         int len=strlen(s+1);
15         memset(ans,0,sizeof(ans));
16         for(int i=1;i<=n;++i)++ans[s[i]-'A'][i];
17         for(int j=0;j<26;++j)
18             for(int i=1;i<=n;++i)
19                 ans[j][i]+=ans[j][i-1];
20         printf("Case #%d:\n",k);
21         for(int i=1;i<=q;i++){
22             scanf("%d%d",&a,&b);
23             for(int j=0;j<=25;j++){
24                 if(ans[j][b]-ans[j][a-1]!=0){
25                     printf("%d\n",ans[j][b]-ans[j][a-1]);
26                     break;
27                 }
28             }
29         }
30     }
31     return 0;
32 }

转载于:https://www.cnblogs.com/jyroy/p/9424862.html

2018百度之星资格赛:1002:子串查询相关推荐

  1. 字符串处理 百度之星资格赛 1002 列变位法解密

    题目传送门 1 /* 2 字符串处理:要求解码,然而二维数组开不下,可以直接输出 3 只要在余数的地方判断一下就行了,vector的效率不高 4 */ 5 #include <cstdio> ...

  2. 字符串处理 2015百度之星资格赛 1002 列变位法解密

    题目传送门 1 /* 2 字符串处理:要求解码,然而二维数组开不下,可以直接输出 3 只要在余数的地方判断一下就行了,vector的效率不高 4 另外:感觉麻烦的地方应该纸上写写就清楚了 5 */ 6 ...

  3. 2018百度之星程序设计大赛 - 资格赛 1002 子串查询

    子串查询 Accepts: 1262 Submissions: 5335 Time Limit: 3500/3000 MS (Java/Others) Memory Limit: 262144/262 ...

  4. 【2018百度之星资格赛】1002 子串查询

    题目 度度熊的字符串课堂开始了!要以像度度熊一样的天才为目标,努力奋斗哦! 为了检验你是否具备不听课的资质,度度熊准备了一个只包含大写英文字母的字符串 A[1,n]=a1a2⋯anA[1,n] = a ...

  5. 2015百度之星资格赛1002

    </pre><p></p><p></p>题目名称:列变位法解密 <p>题目链接:http://bestcoder.hdu.edu ...

  6. HDU - 6344 2018百度之星资格赛 1001调查问卷(状压dp)

    调查问卷  Accepts: 1289  Submissions: 5642  Time Limit: 6500/6000 MS (Java/Others)  Memory Limit: 262144 ...

  7. ACM学习历程—BestCoder 2015百度之星资格赛1002 列变位法解密(vector容器)

    Problem Description 列变位法是古典密码算法中变位加密的一种方法,具体过程如下 将明文字符分割成个数固定的分组(如5个一组,5即为密钥),按一组一行的次序整齐排列,最后不足一组不放置 ...

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

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

  9. 2014年百度之星资格赛第一题Energy Conversion

    2014年百度之星资格赛第一题Energy Conversion Problem Description 魔法师百小度也有遇到难题的时候-- 如今,百小度正在一个古老的石门面前,石门上有一段古老的魔法 ...

最新文章

  1. JavaAgent 实现字节码注入
  2. SAP PM入门系列24 - IK07 Display Measuring Points
  3. Android设计模式系列(2)--SDK源码之观察者模式
  4. NGUI ListEventDelegate 小坑
  5. qq邮箱电脑版登录入口_青骄第二课堂学生平台登录入口,青骄第二课堂登录入口(官网手机版入口:https://m.2class.com/)...
  6. 第3周 实践项目2 建设”顺序表“算法库(可参考为模板)
  7. python机器学习彩票_Python机器学习及实战kaggle从零到竞赛PDF电子版分享
  8. 个人比较喜欢的一个故事,与大家分享一下
  9. 操作文件的类 File demo3 小练习
  10. 谷歌浏览器插件安装 音量提升插件Volume Control
  11. 目标检测算法综述(近20年)
  12. CSP-S2020总结
  13. MIMO技术杂谈(一)浅谈分集与复用的权衡_akala啦_新浪博客
  14. Codeforces Gym 100015G Guessing Game 差分约束
  15. 欧盟ROHS有害物质测试标准
  16. ubuntu16.04系统制作本地apt源
  17. php 源码简单加密的几种方法
  18. [附源码]java毕业设计小锅米线点餐管理系统
  19. 清除dns服务器信息,DNS服务器中的老化和清理
  20. OpenSea 能与 Amazon、eBay 等顶级实体电商一较高下吗?

热门文章

  1. ListDictionary:改进的OrderedDictionary
  2. 使用Angular和ASP.net Core的Raw Websockets迷你游戏
  3. 使用AspNet Core或纯静态HTML文件的跨平台桌面应用程序
  4. 将您的SQL Server工作负载迁移到PostgreSQL –第3部分
  5. 提高软件质量的10点
  6. java跨库调用存储_java-调用spring数据其余存储库方法不会返回...
  7. R语言ggplot2移除图例_读书笔记:R语言绘图—ggplot2
  8. python客户端修改session_Python接口自动化之cookie、session应用
  9. chart.js雷达图不显示刻度标签_Matplotlib从入门再也不放弃
  10. 电子计算机简称什么也称什么,点点点电子美容仪