【PAT甲级真题】- Count PAT‘s (25)

题目来源

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.

输入描述:

Each input file contains one test case. For each case, there is only one line giving a string of no more than 10 5 10^5 105

characters containing only P, A, or T.

输出描述:

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.

输入例子:

复制代码
APPAPT

输出例子:

复制代码
2

思路简介

一道经典的 DP 题

推理一遍就是:

  1. 如果当前 "PA" 的数目是 s1,"PAT" 的数目是 s2,那么输入一个 "T" ,它可以和前面所有的 "PA" 组成新的 "PAT" ,总的 "PAT" 就是新的加上旧的,即 s1+s2
  2. 同理如果当前 "P" 的数目是 s0,"PA" 的数目是 s1,那么输入一个 "A" ,它可以和前面所有的 "P" 组成新的 "PA" ,新的加上旧的即 "PA" 的总数

转移方程就是

复制代码
if cin==T:
	PAT=PAT+PA
else if cin== A:
	PA=PA+P
else:
	P++

遇到的问题

无,一遍过

代码

cpp 复制代码
/**
 * https://www.nowcoder.com/pat/5/problem/4039
 * dp
 */
#include<bits/stdc++.h>
using namespace std;


void solve(){
    string s;
    cin>>s;
    int len=s.size();
    int p=0,pa=0,pat=0;
    for(int i=0;i<len;++i){
        if(s[i]=='P')p++;
        if(s[i]=='A')pa=pa+p;
        if(s[i]=='T')pat=(pa+pat)%1000000007;
    }
    cout<<pat;
}

int main(){
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    //fstream in("in.txt",ios::in);cin.rdbuf(in.rdbuf());
    int T=1;
    //cin>>T;
    while(T--){
        solve();
    }
    return 0;
}
相关推荐
stsdddd2 小时前
YOLO算法建筑工地安全帽目标检测数据集16881张:标注核对笔记
算法·yolo·目标检测
CV爱数码2 小时前
论文精读|Learned Primal-Dual:把原始–对偶算法展开成网络
图像处理·算法·计算机视觉·ct·重建·断层扫描
yuniko-n3 小时前
【算法】约瑟夫环问题
java·算法
Interview Aid1123 小时前
Snowflake OA 面试真题:前缀和、BFS 与动态规划
面试·动态规划·宽度优先
syagain_zsx3 小时前
jsoncpp 使用指南:编译链接、Json::Value 取值与高频坑
c++·json·库·http格式
l1t3 小时前
测试DuckDB v2.1.0-alpha49002的bignum乘法
数据库·sql·算法·duckdb
Nil2083 小时前
LeetCode 283移动零
数据结构·算法·leetcode
CQU_JIAKE3 小时前
10.18【A】
算法
LMT流氓兔4 小时前
第五单元——第4课:给工具参数加校验
java·前端·算法·ai·langchain
布莱克6054 小时前
理解 = delete 与 = default:两种赋值语义的差异
c++