字符串 APPAPT
中包含了两个单词 PAT
,其中第一个 PAT
是第 2 位(P
),第 4 位(A
),第 6 位(T
);第二个 PAT
是第 3 位(P
),第 4 位(A
),第 6 位(T
)。
现给定字符串,问一共可以形成多少个 PAT
?
输入格式:
输入只有一行,包含一个字符串,长度不超过1,只包含 P
、A
、T
三种字母。
输出格式:
在一行中输出给定字符串中包含多少个 PAT
。由于结果可能比较大,只输出对 1000000007 取余数的结果。
输入样例:
APPAPT
输出样例:
2
思路:这里我最开始想用循环写,结果超时了。然后想到用3个数进行累加,不断输入一个字符c,设置3个数字进行累加,依次算P、A、T的个数,并随输入而更新,直到输入结束。代码如下:
#include <iostream> #incude <cstdio> #define LL long long using namespace std; int main() { char c; int p=0,pa=0,pat=0; while(scanf("%c",&c)&&c!=' '&&c!='\n')//这样输入保证了输入P,统计p的数量,输入A时,统计PA的个数,输入T时,统计PAT的个数,%1000000007是为了精简计算,每个都求余对结果无影响。 { if(c=='P')p++; if(c=='A') { pa+=p; pa=pa%1000000007; } if(c=='T') { pat+=pa; pat=pat%1000000007; } } cout<<pat; return 0; }