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

Posted 47pineapple

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 

 

以上是关于PAT 乙级 1040.有几个PAT C++/Java的主要内容,如果未能解决你的问题,请参考以下文章

PTA乙级 (*1040 有几个PAT (25分))

PAT乙级1040

1040. 有几个PAT(25)

PAT 1040 有几个PAT

P1040 有几个PAT

PAT (Basic Level) Practise 1040 有几个PAT(DP)