PAT乙级1040有几个PAT 25(分)

题目

字符串 APPAPT 中包含了两个单词 PAT ,其中第一个 PAT 是第 2 位( P ),第 4 位( A ),第 6 位( T );第二个 PAT 是第 3 位( P ),第 4 位( A ),第 6 位( T )。

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

输入格式:

输入只有一行,包含一个字符串,长度不超过 1 0 5 10^5 1 0 ? 5 ? ? ,只包含 P A T 三种字母。

输出格式:

在一行中输出给定字符串中包含多少个 PAT 。由于结果可能比较大,只输出对 1000000007 取余数的结果。

输入样例:

APPAPT

输出样例:

2

代码


#include<iostream>
using namespace std;
int main()
{
    
    
	long long cal = 0;
	long long *p=new long long[100000], * a = new long long[100000], * t = new long long[100000], i = 0;
	string in="";
	cin >> in;
	for (i = 0; i < 100000; i++)
	{
    
    
		p[i] = 0;
		a[i] = 0;
		t[i] = 0;
	}
	i = 0;
	while (in[i++] != '\0')
		if (in[i - 1] == 'P')
			p[i-1]++;
		else if(in[i - 1] == 'A')
			a[i-1]++;
		else if(in[i - 1] == 'T')
			t[i-1]++;
	for (i = 99998; i >= 0; i--)
		t[i] += t[i + 1];
	for (i = 0; i < 100000; i++)
		a[i] *= t[i];
	for (i = 99998; i >= 0; i--)
		a[i] += a[i + 1];
	for (i = 0; i < 100000; i++)
		if (p[i] != 0)
			cal += p[i] *a[i];
	cout << cal % 1000000007;
	return 0;
}

题目详情链接

猜你喜欢

转载自blog.csdn.net/qq_41985293/article/details/115035365