1040. 有几个PAT(25)

时间限制
120 ms

内存限制
65536 kB

代码长度限制
8000 B

判题程序
Standard

作者
CAO, Peng

字符串APPAPT中包含了两个单词“PAT”,其中第一个PAT是第2位(P),第4位(A),第6位(T);第二个PAT是第3位(P),第4位(A),第6位(T)。

现给定字符串,问一共可以形成多少个PAT?

输入格式:

输入只有一行,包含一个字符串,长度不超过105,只包含P、A、T三种字母。

输出格式:

在一行中输出给定字符串中包含多少个PAT。由于结果可能比较大,只输出对1000000007取余数的结果。

输入样例:

APPAPT

输出样例:

2

题目链接:PAT 1040

题意简单就不多说了,反正看到这题感觉是用DP,因为看题目的意思又取余又计数的……然后想了一下,用dp[k][i]表示当前到i位置时收集到了P(0)、PA(1)、PAT(2)三个字符的个数。

然后感觉应该有这样的递推式:

dp[0][i] = (dp[0][i - 1] + 1) % mod;
dp[1][i] = (dp[1][i] + dp[0][i - 1]) % mod;
dp[2][i] = (dp[2][i] + dp[1][i - 1]) % mod;

然后交了一发居然过了,不知道是数据弱还是这个递推式没有问题……

代码:

#include <stdio.h>
#include <bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
#define LC(x) (x<<1)
#define RC(x) ((x<<1)+1)
#define MID(x,y) ((x+y)>>1)
#define CLR(arr,val) memset(arr,val,sizeof(arr))
#define FAST_IO ios::sync_with_stdio(false);cin.tie(0);
typedef pair<int, int> pii;
typedef long long LL;
const double PI = acos(-1.0);
const int N = 1e5 + 7;
const int mod = 1000000007;
char s[N];
int dp[3][N];int main(void)
{int i, len;while (~scanf("%s", s + 1)){CLR(dp, 0);len = strlen(s + 1);for (i = 1; i <= len; ++i){dp[0][i] = dp[0][i - 1];dp[1][i] = dp[1][i - 1];dp[2][i] = dp[2][i - 1];if (s[i] == 'P')dp[0][i] = (dp[0][i - 1] + 1) % mod;else if (s[i] == 'A')dp[1][i] = (dp[1][i] + dp[0][i - 1]) % mod;else if (s[i] == 'T')dp[2][i] = (dp[2][i] + dp[1][i - 1]) % mod;}printf("%d\n", dp[2][len]);}return 0;
}

转载于:https://www.cnblogs.com/Blackops/p/6257790.html

PAT (Basic Level) Practise 1040 有几个PAT(DP)相关推荐

  1. PAT (Basic Level) Practise (中文)-1025. 反转链表 (25)

    PAT (Basic Level) Practise (中文)-1025. 反转链表 (25)   http://www.patest.cn/contests/pat-b-practise/1025 ...

  2. PAT (Basic Level) Practise (中文)-1034. 有理数四则运算(20)

    PAT (Basic Level) Practise (中文)-1034. 有理数四则运算(20)  http://www.patest.cn/contests/pat-b-practise/1034 ...

  3. 卡拉兹(Callatz)猜想,PAT(Basic Level) Practise NO.1001

    PAT(Basic Level) Practise NO.1001 卡拉兹(Callatz)猜想: 对任何一个自然数n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把(3n+1)砍掉一半. 这样 ...

  4. PAT乙级真题全集-PAT (Basic Level) Practise (中文)

    1001. 害死人不偿命的(3n+1)猜想 (15) 卡拉兹(Callatz)猜想: 对任何一个自然数n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把(3n+1)砍掉一半.这样一直反复砍下去, ...

  5. PAT (Basic Level) Practise 1045 快速排序(离散化+主席树区间内的区间求和)

    1045. 快速排序(25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CAO, Peng 著名的快速排序算法里有一个经典的划分 ...

  6. PAT (Basic Level) Practise:1012. 数字分类

    [题目链接] 给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字: A1 = 能被5整除的数字中所有偶数的和: A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3- ...

  7. PAT (Basic Level) Practise:1017. A除以B

    [题目链接] 本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数.你需要输出商数Q和余数R,使得A = B * Q + R成立. 输入格式: 输入在1行中依次给出A和B,中间以1空格 ...

  8. PAT (Basic Level) Practise - 继续(3n+1)猜想

    题目链接:https://www.patest.cn/submissions/4414905 1005. 继续(3n+1)猜想 (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限 ...

  9. PAT (Basic Level) Practise:1037. 在霍格沃茨找零钱

    [题目链接] 如果你是哈利·波特迷,你会知道魔法世界有它自己的货币系统 -- 就如海格告诉哈利的:"十七个银西可(Sickle)兑一个加隆(Galleon),二十九个纳特(Knut)兑一个西 ...

最新文章

  1. Python 标准库之 subprocesss
  2. 解决pip更新问题。 You are using pip version 19.0.3, however version 19.1 is available.
  3. rj45带滤波器20/05的数字是什么意思_「手机维修自学教程」认识手机射频电路中的滤波器 维修技巧分析...
  4. sql已经完成,生成表
  5. Nginx中gzip_static使用测试
  6. jq 通过标签名称获取标签_通过微盛·企微管家如何自动给客户打标签?
  7. SSH实战 · 唯唯乐购项目(中)
  8. [Python教程] 一只乌龟其实也很酷 (1、动起来)
  9. Redis面试常问3 如何实现分布式锁 记住Redis的原子性
  10. EasyUI加zTree使用解析 easyui修改操作的表单回显方法 验证框提交表单前验证 datagrid的load方法...
  11. cenos7部署samba
  12. 成也DP,败也DP(AFO?)
  13. 管理新语:工作没做好,批评几句,怎么成了诛心
  14. (笔记) SpringCloud之Hystrix断路器 属性详解
  15. 闪电网络开启BTC支付时代?他们不同意
  16. Java定时自动锁屏小程序_小程序 番茄时钟如何实现锁屏持续运行功能
  17. 计算机控制系统a卷-答案,微型计算机控制技术试卷附标准答案A
  18. TCP粘包/拆包概述
  19. 数据库的基本操作(增删改查)
  20. IEEE 754 32bit浮点标识

热门文章

  1. 存储过程中同一语句多个聚合函数时 into 用法
  2. Android总结篇系列:Activity Intent Flags及Task相关属性
  3. zoj 3386 Trick or Treat 三分 求最大值的 最小值
  4. js控制每行输出2个LI隔行换色
  5. 用SPSS进行单样本T检验(One -Sample T Test)
  6. English as a medium of instruction
  7. foundation of the academics
  8. hide subscribers is a good approach if you have a very limited subscribers
  9. apple给我的感受
  10. 正如孙正义的时间机器的理论