PTA basic 1040 有几个PAT (25 分) c++语言实现(g++)

字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第 2 位(P),第 4 位(A),第 6 位(T);第二个 PAT 是第 3 位(P),第 4 位(A),第 6 位(T)。

现给定字符串,问一共可以形成多少个 PAT

输入格式:

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

输出格式:

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

输入样例:

APPAPT
 

输出样例:

2


测试点0 1   三循环能通过
测试点2    大量数据,但是结果不超过1000000007范围
测试点3 4  大量数据超过1000000007

没做出来 ,抄了别人的答案 https://www.liuchuo.net/archives/573


 1 #include <iostream>
 2 #include <string>
 3 using namespace std;
 4 int main(){
 5     int countP=0,countT=0,sum=0;
 6     string str;
 7     cin >>str;
 8     for(int i=0;i<str.size();i++){
 9         if(str[i]=='P'){
10             countP++;
11         }
12     }
13     for(int i=str.size()-1;i>=0;i--){
14         if(str[i]=='P'){
15             countP--;
16         }
17         if(str[i]=='T'){
18             countT++;
19         }
20         if(str[i]=='A'){
21             sum=(sum+((countT*countP)%1000000007))%1000000007;//测试点3 4
22         }
23     }
24     cout << sum << endl;
25 return 0;
26 }

 




posted @ 2021-05-06 22:58  keiiha  阅读(49)  评论(0编辑  收藏  举报