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 }
总结:
找规律题,规律是一下就找到了,但是找到方法去实现代码也很重要。