天天看点

PTA(Basic Level) 1040 有几个PAT

字符串 

APPAPT

 中包含了两个单词 

PAT

,其中第一个 

PAT

 是第 2 位(

P

),第 4 位(

A

),第 6 位(

T

);第二个 

PAT

 是第 3 位(

P

),第 4 位(

A

),第 6 位(

T

)。

现给定字符串,问一共可以形成多少个 

PAT

输入格式:

输入只有一行,包含一个字符串,长度不超过10​5​​,只包含 

P

A

T

 三种字母。

输出格式:

在一行中输出给定字符串中包含多少个 

PAT

。由于结果可能比较大,只输出对 1000000007 取余数的结果。

输入样例:

APPAPT
           

输出样例:

2
           

题解 

先用数组记录截止到数组s中的某个字母时P的数量

再由s从后往前记录T的个数

若读到A,则将此A前的P个数与A后的T个数相乘

所有A加和后再mod即为ans

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;

const int MOD = 1000000007;
char s[100200];
int main()
{
	int np[100200] = { 0 }, nt = 0, ans = 0, len;
	scanf("%s", s);
	len = strlen(s);
	for (int i = 0; i < len; i++) {
		if (i > 0)
			np[i] = np[i - 1];
		if (s[i] == 'P')
			np[i]++;
	}
	for (int i = len - 1; i >= 0; i--) {
		if (s[i] == 'T')
			nt++;
		else if (s[i] == 'A')
			ans = (ans + np[i] * nt) % MOD;
	}
	printf("%d", ans);
	return 0;
}