PAT 乙级 1040 有几个PAT (小学数学题)

1040 有几个PAT (25 分)

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

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

输入格式:

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

输出格式:

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

输入样例:

APPAPT

输出样例:

2

分析:

小学数学,算是乙级里面和算法有点关系的题了,当时想了挺久。暴力是会超时的。

#include
#include

using namespace std;

int main()
{
     int num_p = 0, num = 0;
     long sum = 0;
     string str;
     getline(cin, str);
     int length = str.length();
     for (int i = 0; i < length; ++i)
     {
         if (str[i] == 'P')
             ++num_p;            //统计A前面的P的个数
         else if (str[i] == 'A')
             num += num_p;        //num统计固定的T前面所有的A前面P的个数相加
         else if (str[i] == 'T')
             sum += num;            //统计每个T所存在的PAT总数
     }
     cout << sum % 1000000007 << endl;//在这里取余和在上面取余一样,sum是long

 }

 

你可能感兴趣的:(算法)