首页 > 学院 > 开发设计 > 正文

PAT-1040. 有几个PAT(25)

2019-11-11 05:32:01
字体:
来源:转载
供稿:网友

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

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

输入格式:

输入只有一行,包含一个字符串,长度不超过105,只包含P、A、T三种字母。

输出格式:

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

输入样例:
APPAPT输出样例:

2

解题思路:按题目思路理解,此题中每一个P都可和之后的每一个A,T组成一个PAT,每一个A都可和之前的P及之后的T组成PAT,每一个T都可和之前的P,A组成PAT。此代码按照A的数量把每个A能组成的PAT数量相加总和。

提交代码

#include <stdio.h>#include <string.h>int main(){  char *p,*q;  char a[100002];  int nump = 0,numq = 0,s = 0;  //P,T,PAT的数量  scanf("%s",a);  p = a;  q = &a[strlen(a) - 1];  while(*p != 'P') //让p指针指向第一个P所在的位置,nump准备计数    p++;  while(*q != 'T') //q指针指向最后一个T所在的位置    q--;  while(*p != 'A') //让p指针指向第一个A所在的位置  {    if(*p == 'P')  //记下p的个数      nump++;    p++;  }  while(q > p)     //记下当前p位置之后T的个数  {    if(*q == 'T')      numq++;    q--;  }  q = &a[strlen(a) - 1];  while(q > p)  {    if(*p == 'A')   //每遇到一个A,累加能组成PAT的数量    {      s += (nump * numq);      if(s >= 1000000007)        s %= 1000000007;    }    else if(*p == 'P')      nump++;    else if(*p == 'T')      numq--;    p++;  }  PRintf("%d/n",s);  return 0;}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表