1040 有几个PAT (25 分)

题目:1040 有几个PAT (25 分)

思路:

  • 是个规律题,只要找到规律就有思路,那代码基本就有了,就是怎么实现比较好和是否简洁的问题。
  • 很明显:A是分水岭,A前面有多少个P和A后面有多少个T知道的话,那有几个PAT就是P的个数*T的个数的问题了。
  • 总个数为前面所有A所在位置能构成的PAT数+现在A所在位置能构成的PAT数。
  • 详情代码。

代码:

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4 #include <sstream>
 5 #include <cmath>
 6 #include <algorithm>
 7 #include <string>
 8 #include <stack>
 9 #include <queue>
10 #include <vector>
11 #include <map>
12 using namespace std;
13 const int mod = 1000000007;
14 
15 int main()
16 {
17     string s;
18     cin >> s;
19     int cntt = 0, cntp = 0, sum = 0;
20     for(int i = 0; i < s.length(); i++)
21     {
22         if(s[i] == 'T')  //先记录全部的T的个数
23             cntt++;
24     }
25     for(int i = 0; i < s.length(); i++)
26     {
27         if(s[i] == 'P')  //记录A前的P的个数
28             cntp++;
29         else if(s[i] == 'T')  //A前的T没用,减去
30             cntt--;
31         else if(s[i] == 'A')  //一旦遇到A,此时的P和T的个数就是满足条件的,进行计算
32             sum = (sum + cntp * cntt) % mod;
33     }
34     printf("%d", sum);
35     return 0;
36 }

 

总结:

  找规律题,规律是一下就找到了,但是找到方法去实现代码也很重要。

posted @ 2019-08-10 16:07  Anzer  阅读(182)  评论(0编辑  收藏  举报