1040. 有几个PAT

输入格式:

输入只有一行,包含一个字符串,长度不超过1,只包含 PAT 三种字母。

输出格式:

在一行中输出给定字符串中包含多少个 PAT。由于结果可能比较大,只输出对 1000000007 取余数的结果。

输入样例:

APPAPT

输出样例:

2
#include <stdio.h>

#define LIM 1000000007

int main()
{
    int P = 0, PA = 0, PAT = 0;
    char c;

    while((c = getchar()) != '\n')
    {
        if(c == 'P')   P++;
        if(c == 'A')   PA = (PA + P) ;
        if(c == 'T')   PAT = (PAT + PA) % LIM;
    }
    printf("%d", PAT);

    return 0;
}

已知一个长度为n的字符串中“PAT”的个数为sum,如果在这个字符串后添加一个字符后组成的新的字符串中“PAT”的个数会是多少呢?
如果添加的字符为‘P’,新字符串的“PAT”个数不发生变化。
如果添加的字符为‘A’,新字符串的“PAT”个数不发生变化。
如果添加的字符为‘T’,新字符串的“PAT”个数可能发生变化。而发生变化的数量是因为添加的‘T’构成了新的“PAT”。想要知道新构成的“PAT”的数量,则需要知道旧字符串中“PA”的数量,因为旧字符串中“PA”的数量等于新构成的“PAT”的数量。即新字符串的“PAT”个数=旧字符串中“PA”的数量+旧字符串中“PAT”的数量。
同理,遇到‘A’时新字符串中‘PA’的数量=旧字符串中‘P’的数量+旧字符串中‘PA’的数量。



猜你喜欢

转载自www.cnblogs.com/chcodelife/p/11130010.html