题目分析:

由于本题字符串长度有10^5所以直接暴力是不可取的,猜测最后的算法应该是先预处理一下再走一层循环就能得到答案,所以本题的关键就在于这个预处理的过程,由于本题字符串匹配的内容的固定的PAT,所以我们可以这样想,对于一个输入的串,我们找到每个A的位置,只要知道这个A的前面有几个P,这个A的后面有几个T,就可以得到以这个A为中心的所有种数,二者相乘即可,然后如果我们能得到0~s.size()-1范围内每个A的前面有多少个P,每个A后面有多少个T,只要从头遍历一遍并且求和就能得到最终答案,由于结果可能很大需要MOD

本题代码:

 1 #include<iostream>
2 #include<string>
3 #include<string.h>
4 #include<stdio.h>
5 using namespace std;
6
7 const int N = 100005;
8 const int M = 1000000007;
9 int p[N];
10 int t[N];
11
12 int main(){
13 string s;
14 cin>>s;
15 memset(t, 0, sizeof(t));
16 memset(p, 0, sizeof(p));
17 int len = s.size();
18 for(int i = 1; i < len; i++){
19 if(s[i-1] == 'P') p[i] = p[i-1]+1;
20 else p[i] = p[i-1];
21 }
22 for(int i = len-2; i >= 0; i--){
23 if(s[i+1] == 'T') t[i] = t[i+1]+1;
24 else t[i] = t[i+1];
25 }
26 int ans = 0;
27 for(int i = 0; i < len; i++){
28 if(s[i] == 'A'){
29 int temp = p[i]*t[i]%M;
30 ans += temp;
31 ans %= M;
32 }
33 }
34 printf("%d\n", ans);
35 return 0;
36 }

最新文章

  1. Vertica的date与timestamp数据类型,to_date()与to_timestamp()函数区别
  2. lamp php的ssl,ssh支持
  3. 孙鑫MFC学习笔记20:Hook编程
  4. rsync安装及配置
  5. ibatis CDATA
  6. Page 16 Exercises 1.2.3 -------Introduction to Software Testing (Paul Ammann and Jeff Offutt)
  7. 【Android 界面效果42】如何自定义字体
  8. Dijkstra最短路径算法
  9. 【转】android的消息处理机制(图+源码分析)——Looper,Handler,Message
  10. iOS网络开发-打造自己的视频客户端
  11. Microsoft Edge浏览器下载文件乱码修复方法(二)
  12. 访问vsts私有nuget
  13. C# 生成小于Int数值绝对值的随机数
  14. 【转】WPF自定义控件与样式(11)-等待/忙/正在加载状态-控件实现
  15. ECharts + Jquery 做大屏展示
  16. 人机交互之QQ拼音
  17. kafka_2.11-0.8.2.1生产者producer的Java实现
  18. CENTOS下搭建SVN服务器(转)
  19. Vue组件(知识)
  20. 转换图片为base64

热门文章

  1. 题解 洛谷P6853 station
  2. NOI2020网上同步赛 游记
  3. 题解-洛谷P4724 【模板】三维凸包
  4. CIBN手机电视8.3.2永久VIP
  5. react项目中的一些配置
  6. I/O-基本概念
  7. Excel-HLOOKUP函数匹配查找②
  8. 06-flask-文件上传案例
  9. Gopher协议在SSRF漏洞中的深入研究
  10. SpringBoot从入门到精通教程(四)