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 }
  • 相关阅读:
    Java 重写(Override)与重载(Overload)
    Java 继承
    Java 异常处理
    Java Scanner 类
    Java 流(Stream)、文件(File)和IO
    Java 方法
    Java 正则表达式
    Beta冲刺——代码规范、冲刺任务与计划
    Beta冲刺——凡事预则立
    Beta冲刺——问题总结博客(事后诸葛亮和组员交换事宜)
  • 原文地址:https://www.cnblogs.com/chunlinn/p/10598676.html
Copyright © 2011-2022 走看看