PAT 乙級 1040.有幾個PAT C++/Java

題目來源ios

字符串 APPAPT 中包含了兩個單詞 PAT,其中第一個 PAT 是第 2 位(P),第 4 位(A),第 6 位(T);第二個 PAT 是第 3 位(P),第 4 位(A),第 6 位(T)。spa

現給定字符串,問一共能夠造成多少個 PATcode

輸入格式:

輸入只有一行,包含一個字符串,長度不超過1,只包含 PAT 三種字母。blog

輸出格式:

在一行中輸出給定字符串中包含多少個 PAT。因爲結果可能比較大,只輸出對 1000000007 取餘數的結果。ci

輸入樣例:

APPAPT

輸出樣例:

2

分析:

對於一個肯定位置的A來講,造成PAT的個數,就至關於 A左邊P的個數 與 A右邊T的個數 的成績字符串

全部先遍歷一次字符串,統計T的總個數。get

第二次遍歷字符串,遇到P,則countP++;遇到A,則countP * countT;遇到T則countT--string

爲何要countT--?it

 遇到一個T,則說明這個T就位於後面的A的左邊,不能與後面的A構成PATio

 

 

 注意,獲得的結果還要對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 }
相關文章
相關標籤/搜索