PAT (Basic Level) Practise (中文)-1040. 有几个PAT(25)
1040. 有几个PAT(25) http://www.patest.cn/contests/pat-b-practise/1040
字符串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
原题: PAT(A) 101-125-1-2015-03-14 http://www.patest.cn/contests/pat-a-101-125-1-2015-03-14/B
The string APPAPT contains two PAT's as substrings. The first one is formed by the 2nd, the 4th, and the 6th characters, and the second one is formed by the 3rd, the 4th, and the 6th characters.
Now given any string, you are supposed to tell the number of PAT's contained in the string.
Input Specification:
Each input file contains one test case. For each case, there is only one line giving a string of no more than 105 characters containing only P, A, or T.
Output Specification:
For each test case, print in one line the number of PAT's contained in the string. Since the result may be a huge number, you only have to output the result moded by 1000000007.
Sample Input:
APPAPT
Sample Output:
2
这道题是2015年3月份的甲级PAT考试试题,不难,但是脑筋得活才能拿到满分。
基本注意事项:
提供的字符串只可能包含'P'、'A'、'T'三种字符
长度不超过10的五次方,如果用字符数组的话,则字符串的长度至少是105+1(结束符'/0')
结果数据可能很大,需要及时的模(%=1000000007)处理
分析:
如果暴力解决,顺序遍历,时间复杂度为(10的五次方)的三次方,可能会超时,所以拿不到满分;在想不到更优解时,可以这么干。
可以考虑组合排列的方法,逆序总结(可以递归实现)。
核心思路:如果有一个P出现,则只要知道后面有多少种AT可选,则这个P可以对应的PAT选择方法就有多少种;AT类似。
啰嗦思路:组成PAT的条件有P在A前出现,A在T前出现 。
求PAT选择的方法有多少种,则只要知道每个P对应的PAT选择方法有多少种,求和即可;
每个P对应PAT种类取决于这个P的后面,有多少种AT可选(如果有一个P出现,则只要知道后面有多少种AT可选,则这个P可以对应的PAT选择方法就有多少种)。
一个P后面有多少种AT可选,其实和这个字符串中多少种PAT可选是一个问题,即所有的A对应的AT选法的和;
一个A对应的AT种类取决于这个A后面有多少种T可选(如果有一个A出现,则只要知道后面有多少种T出现,则这个A对应的AT选择方法就有多少种)。
eg:PPPAATTT
字符: P P P A A T T T
位置: 7 6 5 4 3 2 1 0
下标为7的P对应的PAT选法取决于后面字符串(PPAATTT)中AT的选法,其他P相应对应自己后面的字符串的AT选法;
下标为4的A对应的AT选法取决于后面字符串(ATTT)中的T的选法,另一个A相应处理;
下标为2/1/0的T进行不需要选择了,因为一个T对应的T的选法就是自身;
代码变量说明:
numAT表示当前已处理的字符串字串中T的选法,也就表明,如果处理一个字符是A,则这个字符A对应的AT的选法,就是numAT;
numPAT的理解相对应。
手工流程演示:位于下标5的P对应的PAT的选法有6种,来源于P后面的两个A,下标4的A对应的AT有3种选法,下标3的A也是。
第二次刷题时的代码 4月16日 17:15
#include<cstdio>
#include<cstring> int main()
{
char strPAT[];
gets(strPAT); int istr=strlen(strPAT),numAT=,numPAT=,num=;
while(istr--)
{
if('T'==strPAT[istr]) numAT++;
else if('A'==strPAT[istr]) numPAT+=numAT;
else{ // if('P'==strPAT[istr])
num+=numPAT;
if(num>=) num%=;
}
} printf("%d",num);
return ;
}
第一次刷题时的代码 3月19日 14:46
#include<stdio.h>
#include<string.h>
int main()
{
char str[];
gets(str); int istr=strlen(str);
long long numA=,numT=,numP=;
while(istr>)
{
istr--;
if('T'==str[istr]) numT++;
else if('A'==str[istr]) numA+=numT;
else numP+=numA;
} printf("%lld",numP%);
return ; }
PAT (Basic Level) Practise (中文)-1040. 有几个PAT(25)的更多相关文章
- PAT (Basic Level) Practise:1040. 有几个PAT
[题目链接] 字符串APPAPT中包含了两个单词“PAT”,其中第一个PAT是第2位(P),第4位(A),第6位(T):第二个PAT是第3位(P),第4位(A),第6位(T). 现给定字符串,问一共可 ...
- PAT (Basic Level) Practise (中文)-1039. 到底买不买(20)
PAT (Basic Level) Practise (中文)-1039. 到底买不买(20) http://www.patest.cn/contests/pat-b-practise/1039 小红 ...
- PAT (Basic Level) Practise (中文)- 1022. D进制的A+B (20)
PAT (Basic Level) Practise (中文)- 1022. D进制的A+B (20) http://www.patest.cn/contests/pat-b-practise/1 ...
- PAT (Basic Level) Practise (中文)- 1024. 科学计数法 (20)
PAT (Basic Level) Practise (中文)- 1024. 科学计数法 (20) http://www.patest.cn/contests/pat-b-practise/1024 ...
- PAT (Basic Level) Practise (中文)-1025. 反转链表 (25)
PAT (Basic Level) Practise (中文)-1025. 反转链表 (25) http://www.patest.cn/contests/pat-b-practise/1025 ...
- PAT (Basic Level) Practise (中文)- 1026. 程序运行时间(15)
PAT (Basic Level) Practise (中文)- 1026. 程序运行时间(15) http://www.patest.cn/contests/pat-b-practise/10 ...
- PAT (Basic Level) Practise (中文)-1027. 打印沙漏(20)
PAT (Basic Level) Practise (中文)-1027. 打印沙漏(20) http://www.patest.cn/contests/pat-b-practise/1027 本题 ...
- PAT (Basic Level) Practise (中文)-1028. 人口普查(20)
PAT (Basic Level) Practise (中文)-1028. 人口普查(20) http://www.patest.cn/contests/pat-b-practise/1028 某 ...
- PAT (Basic Level) Practise (中文)-1029. 旧键盘(20)
PAT (Basic Level) Practise (中文)-1029. 旧键盘(20) http://www.patest.cn/contests/pat-b-practise/1029 旧键盘上 ...
- PAT (Basic Level) Practise (中文)-1030. 完美数列(25)
PAT (Basic Level) Practise (中文)-1030. 完美数列(25) http://www.patest.cn/contests/pat-b-practise/1030 给 ...
随机推荐
- CentOS初试
由于实在是对ubuntu不太感冒,加上买的鸟哥又是拿CentOS做的例子,所以我就把ubuntu换成了CentOS6.5.依旧win7,CentOS 双系统,具体过程参照http://www.cnbl ...
- 把数据库内容显示在listview上
数据库操作很简单,但用户想看见的是数据库里的内容,那么让数据库内容显示在屏幕上呢,下面做个简单演示,百变不离其中,先看步骤: 把数据库的数据显示至屏幕1. 任意插入一些数据 定义Javabean:Pe ...
- springsource-tool-suite下载(sts)
1 新版本的插件下载 1 直接进入官网下载即可 官网地址:http://spring.io/tools/sts/all. 2 spring官网上下载历史版本的spring插件 1 获取新版本的插件的地 ...
- TOJ 2926 Series
Description An arithmetic series consists of a sequence of terms such that each term minus its immed ...
- spring+springmvc+mybatis 开发JAVA单体应用
myshop 概述 myshop项目是根据视频教程 Java 单体应用 做的一个练习项目,目前完成了登录功能.用户管理.类别管理后续有时间会继续做其它的功能.趁着双11花了99元一年买了台阿里云服务器 ...
- IO流之File类
IO概述: 程序数据都是在内存中,程序运行结束,这些数据将清空,数据都都不能保存下来,下次程序启动的时候,想再把这些数据读出来继续使用,把数据持久化存储,就需要把内存中的数据存储到内存以外的其他持久化 ...
- jQuery Custom PopUp Window
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- TCP/IP五层模型详解
将应用层,表示层,会话层并作应用层,从tcp/ip五层协议的角度来阐述每层的由来与功能,搞清楚了每层的主要协议就理解了整个互联网通信的原理. 首先,用户感知到的只是最上面一层应用层,自上而下每层都依赖 ...
- rem,em,px
http://pxtoem.com/ px,em,rem单位转换工具 px(Pixel)根据显示屏分辨率,固定大小 em,根据父元素大小进行改变 rem,根据html进行相对改变 em 1. bod ...
- vue的拖拽文件
<div ref='select_frame' ondragstart="return false">//防止跳转 </div> this.$refs.se ...