1040 有几个PAT

Posted keep23456

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1040 有几个PAT相关的知识,希望对你有一定的参考价值。

分析:

PPPATTTTPAT

第一个A的左边有3个P,右边有5个T,此时PAT共有15个。

第二个A的左边有4个P,右边有1个T,此时PAT共有4个。

这个字符串包含的PAT总共有19个。

总结,只要知道每个A的左边共有m个P,右边共有n个T,此时PAT的个数位即为m*n;

#include<iostream>
using namespace std;

typedef long long LL;
char a[100010] = {0};
int main() {
    LL i = 0,cnt_P = 0,cnt_T = 0,ans = 0;
    while(scanf("%c",&a[i])!=EOF) {
        if(a[i] == T) cnt_T++;//统计T的个数 
        ++i;
    }
    for(LL j = 0; j < i; ++j) {
        if(a[j] == A) ans = (ans+ cnt_P*cnt_T)%1000000007;//注意:ans也要参与运算后再取模 
        else if(a[j] == P) cnt_P++;//统计当前位左边的P的个数
        else if(a[j] == T) cnt_T--;//统计当前位右边的T的个数
        else ;
    }
    cout<<ans;
    return 0;
}

技术图片

 

以上是关于1040 有几个PAT的主要内容,如果未能解决你的问题,请参考以下文章

1040. 有几个PAT(25)

PAT 1040 有几个PAT

PAT高效技巧算法---1040 有几个PAT (25分)

1040 有几个PAT (25 分)

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

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