您的位置:首页 > 其它

1040. 有几个PAT(25)

2015-10-30 23:04 316 查看
字符串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

#include <string>
#include <iostream>

using namespace std;

int main()
{
string st;
cin>>st;
long sum=0; //求和一共多少种
int cp=0,ca=0,ct=0;
cp=st.find_first_of('P',cp); //先找第一个P
for(int i=cp;i!=-1;)
{
ca=st.find_first_of('A',i); //第一个P之后第一个A
for(int j=ca;j!=-1;)
{
ct=st.find_first_of('T',j); //再找剩余的字符串中第一个T的位置
int count=0;
for(int i=ct;i<st.length();i++) //找一个多少个 T
if(st[i]=='T')
count++;
sum=(sum+count)%1000000007;
j=st.find_first_of('A',j+1); //再返回找下一个A
}
i=st.find_first_of('P',i+1); //再返回找下一个P
}
cout<<sum;
return 0;
}
Aden:很单纯直接的想法,很显然结果会有测试点超时。。

#include<cstdio>
#include<cstring>

int main()
{
char strPAT[100010];
gets(strPAT);

int istr=strlen(strPAT),numAT=0,numPAT=0,num=0;
while(istr--)
{
if('T'==strPAT[istr]) numAT++;
else if('A'==strPAT[istr]) numPAT+=numAT;
else{ // if('P'==strPAT[istr])
num+=numPAT;
if(num>=1000000007) num%=1000000007;
}
}

printf("%d",num);
return 0;
}
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define MAX 100000
#define MOD 1000000007

int main()
{
int numberP = 0 ,numberPA = 0 ,numberPAT = 0;
char strings[MAX];
gets(strings);
int i = 0;
int len = 0 ;
len = strlen(strings);
for( i = 0  ; i < len ; i++ ){
if( strings[i] == 'P' ){
numberP ++;
}else if( strings[i] == 'A' ){
numberPA = ( numberPA + numberP ) % MOD ;
}else{
numberPAT = ( numberPAT + numberPA ) % MOD ;
}
}
printf("%d",numberPAT);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: