1040. 有几个PAT

来源:互联网 发布:顺丰淘宝合作价格表 编辑:程序博客网 时间:2024/04/29 00:12

场景

  • 使用 C++、Python 解决 PAT . 1040。即,求字符 ‘A’ 左侧 ‘P’的个数与右侧 ‘T’ 的个数积的累加和。
    • 字符 ‘A’ 左侧无 ‘P’ 或 右侧 无 ‘T’,则积为 0。
  • 思路确定后,很快搞定代码,提交后竟然“编译错误”,Orz!恶心地忘记加命名空间了!
  • using namespace std;

思路

  • 字符串中字符 ‘A’,左右侧 ‘P’、’T’ 个数均不为0,即为有效。
  • 计算结果为:
    • 字符串中 不同字符’A’ 左侧 ‘P’ 个数与右侧 ‘T’ 个数的乘积和。

问题描述

1040. 有几个PAT(25)

字符串 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


代码片 1 ( C++ )

  • 单层循环计数字符 ‘T’ , 构思巧妙。
#include <iostream> #include <string>//#include <cstdio>using namespace std;int main() {    string s;    cin >> s;    int len=s.length(),coutp=0,coutt=0,result=0;    for(int i=0; i<len; i++) {        if (s[i]=='T') coutt++;    }    for(int j=0; j<len; j++) {        if (s[j]=='P') coutp++;        if (s[j]=='T') coutt--;        if (s[j]=='A') result=(result+(coutp*coutt)%1000000007)%1000000007;    }    cout << result;    // printf("%d",res);    return 0;}

代码片 2 ( Python )

strs=input()result=0for i in range(len(strs)):    if strs[i] == 'A':        result=(result + (strs[:i].count('P')*strs[i:].count('T'))%1000000007)%1000000007print (result)

参考

  • C++ 分析详细(大牛)

PS :
  • 唉,Python狗们,还是尽量争取C++吧。毕竟大多数考场(PAT考试)不给支持 Python 环境啊,,,
  • 最近,真心感觉到算法的强大!越来越感觉自己大学错过了很多美好的东西,呜呜 … ┭┮﹏┭┮
  • 很多时候深入研究些东西有种妙不可言的赶脚! 祝 Lucky .