PAT A1093 Count PAT's [模拟]

题目描述

链接
计算一个字符串中有多少PAT

分析

暴力要超时
要想知道构成多少个PAT,那么遍历字符串后对于每一A,它前面的P的个数和它后面的T的个数的乘积就是能构成的PAT的个数
需要先遍历字符串数一数有多少个T

代码

#include<bits/stdc++.h>
using namespace std;

int main(){
    const int maxn = 1e5+10;
    char s[maxn];
    int cnt = 0;
    scanf("%s", s);
    int len = strlen(s);
    int p,a,t;
    p = a = t = 0;
    for(int i=0;i<len;i++){
        if(s[i] == 'T') t++;
    }
    for(int i=0;i<len;i++){
        if(s[i] == 'P') p++;
        if(s[i] == 'T') t--; //在遇到A前遇到的t都不算
        if(s[i] == 'A') cnt =  (cnt + (p*t)%1000000007)%1000000007;
    }
    printf("%d\n",cnt);

}

猜你喜欢

转载自www.cnblogs.com/doragd/p/11459392.html