1040. 有几个PAT
输入格式:
输入只有一行,包含一个字符串,长度不超过1,只包含 P
、A
、T
三种字母。
输出格式:
在一行中输出给定字符串中包含多少个 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’的数量。