感觉这种题必须得先学思路才能做题。计算出每个 A 前面 P 的个数和每个 A 后面 T 的个数两个个数相乘再把所有相乘结果相加即为最终答案。具体做法是先计算出第一个 A 前面 P 的个数和第一个 A 后面 T 的个数先相乘加入结果继续往后走。在遇到下一个 A 之前遇到 P则 p 。在遇到下一个 A 之前遇到 T则 t --。#includebits/stdc.h using namespace std; int main() { string s; cin s; int numa 0, p 0, t 0, yu 1000000007; long long int sum 0; for(int i 0; i s.size(); i ) if(s[i] A) { numa i; break; } for(int i 0; i numa; i ) if(s[i] P) p ; for(int i numa 1; i s.size(); i ) if(s[i] T) t ; sum p * t; for(int i numa 1; i s.size(); i ) { if(s[i] P) p ; else if(s[i] T) t --; else if(s[i] A) sum p * t; } cout sum % yu endl; return 0; }
PAT 乙级 1040
感觉这种题必须得先学思路才能做题。计算出每个 A 前面 P 的个数和每个 A 后面 T 的个数两个个数相乘再把所有相乘结果相加即为最终答案。具体做法是先计算出第一个 A 前面 P 的个数和第一个 A 后面 T 的个数先相乘加入结果继续往后走。在遇到下一个 A 之前遇到 P则 p 。在遇到下一个 A 之前遇到 T则 t --。#includebits/stdc.h using namespace std; int main() { string s; cin s; int numa 0, p 0, t 0, yu 1000000007; long long int sum 0; for(int i 0; i s.size(); i ) if(s[i] A) { numa i; break; } for(int i 0; i numa; i ) if(s[i] P) p ; for(int i numa 1; i s.size(); i ) if(s[i] T) t ; sum p * t; for(int i numa 1; i s.size(); i ) { if(s[i] P) p ; else if(s[i] T) t --; else if(s[i] A) sum p * t; } cout sum % yu endl; return 0; }