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,只包含 P
、A
、T
三种字母。
输出格式:
在一行中输出给定字符串中包含多少个 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的主要内容,如果未能解决你的问题,请参考以下文章