PAT 乙级 1040.有几个PAT C++/Java

题目来源

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

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

输入格式:

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

输出格式:

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

输入样例:

APPAPT

输出样例:

2

分析:

对于一个确定位置的A来说,形成PAT的个数,就相当于 A左边P的个数 与 A右边T的个数 的成绩

所有先遍历一次字符串,统计T的总个数。

第二次遍历字符串,遇到P,则countP++;遇到A,则countP * countT;遇到T则countT--

为什么要countT--?

 遇到一个T,则说明这个T就位于后面的A的左边,不能与后面的A构成PAT

 

 

 注意,得到的结果还要对1000000007取摸

 

C++实现

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <algorithm>
 4 #include <vector>
 5 #include <map>
 6 #include <set>
 7 #include <string>
 8 #include <cctype>
 9 #include <unordered_map>
10 using namespace std;
11 
12 
13 int main()
14 {
15     string s;
16     int countT = 0;
17     int countP = 0;
18     int result = 0;
19     int mod = 1000000007;
20     cin >> s;
21     int len = s.size();
22     
23     for (int i = 0; i < len; ++i)
24     {
25         if (s[i] == 'T')
26         {
27             countT++;
28         }
29     }
30 
31     for (int i = 0; i < len; ++i)
32     {
33         if (s[i] == 'P')
34         {
35             countP++;
36         }
37         else if (s[i] == 'T')
38         {
39             countT--;
40         }
41         else if (s[i] == 'A')
42         {
43             result = (result + (countT * countP)) % mod;
44         }
45     }
46     cout << result;
47     return 0;
48 }

 

posted @ 2019-10-07 11:43  47的菠萝~  阅读(156)  评论(0编辑  收藏  举报