题目:1040 有几个PAT (25 分)
来源:PAT (Basic Level) Practice
传送门 1040 有几个PAT
题面
题意:给定字符串,找到其中可以形成几个"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;
}