博客
关于我
1093 Count PAT‘s (25分) 含DP做法
阅读量:376 次
发布时间:2019-03-05

本文共 1694 字,大约阅读时间需要 5 分钟。

1093 Count PAT’s (25分)

The string APPAPT contains two PAT’s as substrings. The first one is formed by the 2nd, the 4th, and the 6th characters, and the second one is formed by the 3rd, the 4th, and the 6th characters.

Now given any string, you are supposed to tell the number of PAT’s contained in the string.

Input Specification:

Each input file contains one test case. For each case, there is only one line giving a string of no more than 10 ^ ​5 characters containing only P, A, or T.

Output Specification:

For each test case, print in one line the number of PAT’s contained in the string. Since the result may be a huge number, you only have to output the result moded by 1000000007.

Sample Input:

APPAPT

Sample Output:

2

方法一:题目意思就是找出一个A左边的P个数*右边的T,构造两个数组分别存储在字符串i位置左边P的个数和右边T的个数,然后遍历字符串将合理位置的两个数组的数乘起来相加即可,不要忘了最后模1000000007,设字符串长度N ,整个复杂度就是遍历了三遍字符串所以还是O(N)的,不会超时。这种做法比较直接,也比较容易想到

AC代码

#include
#include
#include
using namespace std;#define N 1000000007typedef long long LL;string m;int main(){ LL res=0; cin >> m; vector
a(m.size(),0); vector
b(m.size(),0); for(int i=1;i
=0;i--) if(m[i+1]=='T') b[i]=b[i+1]+1; else b[i]=b[i+1]; for(int i=0;i

方法二:DP

#include
#include
#include
using namespace std;#define N 1000000007char s[100010],p[]=" PAT";int f[100010][4];int main(){ cin >> s+1; int n=strlen(s+1); f[0][0]=1; for(int i=1;i<=n;i++) for(int j=0;j<=3;j++) { f[i][j]=f[i-1][j]; if(s[i]==p[j]) f[i][j]=(f[i][j]+f[i-1][j-1])%N; } cout << f[n][3]; return 0;}

转载地址:http://azbwz.baihongyu.com/

你可能感兴趣的文章
Navicat for MySQL 命令列 执行SQL语句 历史日志
查看>>
Navicat for MySQL 查看BLOB字段内容
查看>>
Navicat for MySQL(Ubuntu)过期解决方法
查看>>
Navicat Premium 12 卸载和注册表的删除
查看>>
Navicat 导入sql文件
查看>>
navicat 添加外键1215错误
查看>>
navicat 系列软件一点击菜单栏就闪退
查看>>
Navicat 设置时间默认值(当前最新时间)
查看>>
navicat 连接远程mysql
查看>>
navicat:2013-Lost connection to MySQL server at ‘reading initial communication packet解决方法
查看>>
Navicate for mysql 数据库设计-数据库分析
查看>>
Navicat下载和破解以及使用
查看>>
Navicat中怎样将SQLServer的表复制到MySql中
查看>>
navicat创建连接 2002-can‘t connect to server on localhost(10061)且mysql服务已启动问题
查看>>
Navicat可视化界面导入SQL文件生成数据库表
查看>>
Navicat向sqlserver中插入数据时提示:当 IDENTITY_INSERT 设置为 OFF 时,不能向表中的标识列插入显式值
查看>>
Navicat因导入的sql文件中时间数据类型有参数而报错的原因(例:datetime(3))
查看>>
Navicat如何连接MySQL
查看>>
navicat导入.sql文件出错2006- MySQLserver has gone away
查看>>
navicat怎么导出和导入数据表
查看>>