PAT乙级1040 有几个PAT///逻辑题///优化时间复杂度
字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第 2 位§,第 4 位(A),第 6 位(T);第二个 PAT 是第 3 位§,第 4 位(A),第 6 位(T)。 现给定字符串,问一共可以形成多少个 PAT? 输入格式: 输入只有一行,包含一个字符串,长度不超过105,只包含 P、A、T 三种字母。 输出格式: 在一行中输出给定字符串中包含多少个 PAT。由于结果可能比较大,只输出对 1000000007 取余数的结果。 输入样例: APPAPT 输出样例: 2 思路:我的思路是在输入的字符串中找A,分别记录A前面P的个数和A后面T的个数,然后ans将每次P个数和T个数相乘的数相加,最后取余就是最后的答案。但是这个做法只能ac前两个,最后三个会超时。 # include <iostream> # include <string> # include <stdlib.h> using namespace std ; int main ( ) { string s ; unsigned long long rec = 0LL , cntp = 0LL , cntt = 0LL , ans = 0LL ; cin >> s ; while ( s . find ( 'A' ) != string :: npos ) { rec = s . find (