码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-10-07 13:01:49      阅读:63      评论:0      收藏:0      [点我收藏+]

标签:输入   实现   color   pat   一个   ems   string   set   bsp   

题目来源

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

标签:输入   实现   color   pat   一个   ems   string   set   bsp   

原文地址:https://www.cnblogs.com/47Pineapple/p/11629862.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!