PAT A1093 Count PAT's

前言:考研成绩出分。。。又又玩儿几天 不行了,要好好学习,加油~ 复旦的研究生 冲啊!
题目难度:两颗星
题目大意:给定PAT三个字母的字符串,问题目中符合PAT顺序的有多少?
题目坑点:说句实话 是看了算法笔记的提示 才知道利用A作为中间 然后根据两边的P和T的个数进行递推。想法比较受用。
代码如下:

#include<iostream>
#include<stdlib.h>
#include<queue>
#include<stack>
#include<algorithm>
#include<map>
#include<cstring>
using namespace std;
typedef long long LL;
char str[100010];
int p[100010],t[100010];
int main(){
	memset(p,0,sizeof(int)*100010);
	memset(t,0,sizeof(int)*100010);
	cin>>str;
	int count=0;
	for(int i=0;str[i]!='\0';i++){
		if(str[i]=='P'){
			count++;
		}
		p[i+1]=count;
	}
	count=0;
	for(int i=strlen(str)-1;i>0;i--){
		if(str[i]=='T'){
			count++;
		}
		t[i-1]=count;
	}
	LL ans=0;
	for(int i=1;i<strlen(str)-1;i++){
		if(str[i]=='A'){
			ans+=(p[i]*t[i])%1000000007;
			ans%=1000000007;
		}
	}
	cout<<ans;
	return 0;
}

发布了18 篇原创文章 · 获赞 0 · 访问量 178

猜你喜欢

转载自blog.csdn.net/weixin_42302528/article/details/104477920