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取余数的结果。
输入样例:
输出样例:
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;
}
现给定字符串,问一共可以形成多少个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; }
相关文章推荐
- 主线程和子线程的同步控制
- OpenSessionInViewFilter和懒加载那点事
- TI(德州仪器) TMS320C674x逆向分析之二
- 【Nutch】Solr4.6搭建
- 八皇后——递归学习
- LeetCode OJ:Spiral Matrix(螺旋矩阵)
- CODEVS1048石子归并
- CString::TrimLeft和CString::TrimRight
- QtDesigner:Calculator Builder Example
- 数据挖掘聚类算法(DBSCAN、Kmeans)Java实现
- 从性能角度看前缀++和后缀++(++i和i++的深入剖析)
- 高质量程序设计指南C++/c语言读书笔记 第一章
- LeetCode Contains Duplicate III
- 二叉树路径求和
- mapper映射文件配置之select、resultMap
- [每日一答] [20151027] R语言中的套接字socketConnection
- 菜鸟日记之分层
- Win Socket网络编程
- C++primer学习:类模板(1):函数模板,模板参数,实例化
- [每日一答] [20151026] 搭建R的并行计算集群