PAT (Basic Level) Practice 1040 有几个PAT (25 分)

题目:1040 有几个PAT (25 分)

来源:PAT (Basic Level) Practice

传送门 1040 有几个PAT

题面

PAT (Basic Level) Practice 1040 有几个PAT (25 分)

题意:给定字符串,找到其中可以形成几个"PAT"非连续子串

思路:

先扫一遍,得出字符"T"的个数,然后再扫一遍,碰到"P"就把统计p的变量加一,遇到"T"就把统计T的变量减一,遇到"A"就把此时P和T的个数相乘送入答案,因为这就是此时这个A位置上所能形成的PAT的个数。记得对答案取模。

Code

点击查看代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mode =1e9+7;
string s;
ll cp =0,ct=0,ca=0,ans=0;
int main(){
	cin>>s;
	for(ll i=0;i<s.size();i++)
		if(s[i] == 'T')
			ct++;
	for(ll i = 0;i<s.size();i++){
		if(s[i] == 'T')ct--;
		else if(s[i] == 'P')cp++;
		else if(s[i] == 'A'){ans+=ct*cp;ans%mode;}
	}
	cout<<ans%mode<<"\n";
	return 0;
} 
上一篇:WC2022 游记


下一篇:算法学习笔记25:动态规划