A1093 Count PAT's (25 分)

一、技术总结

  1. 这是一个逻辑题,题目大职意思是可以组成多少个PAT,可以以A为中心计算两边的P和T,然后数量乘积最后相加便是答案。
  2. 还有一个注意的是每次相加后记得mod,取余,不要等到最后加完再取余,会报错可能会溢出。

二、参考代码

#include<iostream>
#include<cstring>
using namespace std;
const int maxn = 100010;
const int inf = 1000000007;
int leftNump[maxn] = {0};
string str;
int main(){
	getline(cin, str);
	int len = str.length();
	for(int i = 0; i < len; i++){
		if(i > 0) leftNump[i] = leftNump[i-1];
		if(str[i] == 'P'){
			leftNump[i]++;
		}
	}
	int ans = 0, rightNumT = 0;
	for(int i = len-1; i >= 0; i--){
		if(str[i] == 'T') rightNumT++;
		else if(str[i] == 'A'){
			ans = (ans + leftNump[i] * rightNumT) % inf; 
		} 
	} 
	cout << ans;
	return 0;
}
posted @ 2019-11-18 17:41  睿晞  阅读(235)  评论(0)    收藏  举报