zoukankan      html  css  js  c++  java
  • 【算法笔记】B1040 有几个PAT

    1040 有几个PAT (25 分)

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

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

    输入格式:

    输入只有一行,包含一个字符串,长度不超过105​​,只包含 PAT 三种字母。

    输出格式:

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

    输入样例:

    APPAPT
    

    输出样例:

    2

    思路:

    对于每个A,能组成PAT的个数是左边P的个数和右边T的个数的乘积,因此只统计每个字母左边P的个数即可,时间复杂度为O(len)。

    然后从后往前统计T的个数,每遇到一个A就计算一次并加到结果中。

    codes:

     1 #include<iostream>
     2 using namespace std;
     3 const int maxn = 100010;
     4 const int mod = 1000000007;
     5 string str;
     6 int leftNumP[maxn]={0};
     7 int main(){
     8     getline(cin, str);
     9     int len = str.size();
    10     int cnt = 0;
    11     for(int i = 0; i < len; i++){
    12         if(i > 0) 
    13             leftNumP[i] = leftNumP[i - 1];
    14         if(str[i] == 'P') 
    15             leftNumP[i]++;
    16     }
    17     int rightNumT = 0;
    18     for(int i = len - 1; i >= 0; i--){
    19         if(str[i] == 'T') 
    20             rightNumT ++;
    21         else if(str[i] == 'A'){
    22             cnt = (cnt + leftNumP[i] * rightNumT) % mod;
    23         }
    24     }
    25     cout<<cnt;
    26     return 0;
    27 }
  • 相关阅读:
    python环境搭建以及jupyter notebook的安装和启动
    Python base(三)
    Python base(二)
    Python base(一)
    python之装饰器
    python 内置函数 (二)
    函数的简单写法
    python中set的用法
    python在终端运行时增加一些效果
    序列化写到类里
  • 原文地址:https://www.cnblogs.com/chunlinn/p/10598676.html
Copyright © 2011-2022 走看看