PAT乙级-1040有几个PAT

PAT乙级-1040有几个PAT_第1张图片

解题思路:第一次想的是先统计P个数,然后统计A个数,相乘,再统计T个数,相乘,取余;后面想到PAT之间相应关系,一边遍历字符串,一边统计P A T各字符出现的次数,对于P出现了n次,再出现一次A,PA次数毫无疑问为P的次数;

对于PA出现n次,P出现m次,再出现一次A,那么这个A和之前的P构成PA关系,也就是新增加m次PA,不影响之前PA次数,所以共n+m次;

对于PAT次数一样,只要出现一次T,T和之前k次PA形成PAT关系,PAT次数加上k,得到所有的PAT次数,记得一边统计一边取模。

解题代码:(这次用的C)

#include

#include

int main()

{

char ch[100005];//字符串长度小于1E5,定义1E5+5的字符数组

scanf("%s",ch);//字符串格式输入ch

int P=0,PA=0,PAT=0,i;//从左往右P个数,PA个数,PAT个数,循环变量i

for(i=0;i

if(ch[i]=='P') P++;

else if(ch[i]=='A') PA+=P;

/*PA次数等于PA次数加上P次数,例如TPAPTTA到A位置为,第一个位置P个数为1,PA个数为1,第二个A位置,P个数为2,PA个数为1+2=3,可能本题难点就在搞懂PA个数与P个数关系,懂了这个,PA个数与PAT个数也就差不多了

*/

else {PAT+=PA;PAT%=1000000007;}//PAT对mod取模(取余)

}

printf("%d",PAT);//C语言输出

return 0;

}

你可能感兴趣的:(coding)