PAT——有几个PAT

思路来源:https://www.cnblogs.com/asinlzm/p/4440603.html

字符串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出现,则只要知道后面有多少种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也是。

 1 package com.hone.basical;
 2
 3 import java.util.Scanner;
 4
 5 /**
 6  * 原题目:https://www.patest.cn/contests/pat-b-practise/1039
 7  * @author Xia
 8  * 利用递归来处理!!!!
 9  */
10
11 public class basicalLevel1040howManyPat {
12     public static void main(String[] args) {
13         Scanner in = new Scanner(System.in);
14         char[] pat = in.nextLine().toCharArray();
15         int len = pat.length;
16         in.close();
17         int numPat = 0,numAt = 0, num = 0 ;
18         //从后面往前面遍历
19         while((len--)>0){
20             if (pat[len] == ‘T‘) {
21                 numAt++;
22             }else if (pat[len] == ‘A‘) {
23                 numPat+=numAt;
24             }else {
25                 num+=numPat;
26                 //因为输出的结果具有周期性,所以可以提前处理,当参数大于指定的次数的时候
27                 //可以先取余数
28                 if (num > 1000000007) {
29                     num = num%1000000007;
30                 }
31             }
32         }
33         System.out.println(num);
34     }
35 }
时间: 2024-11-13 10:19:29

PAT——有几个PAT的相关文章

PAT Advanced 1093 Count PAT's (25分)

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 numb

PAT Basic 1095 解码PAT准考证 (25 分)

PAT 准考证号由 4 部分组成: 第 1 位是级别,即 T 代表顶级:A 代表甲级:B 代表乙级: 第 2~4 位是考场编号,范围从 101 到 999: 第 5~10 位是考试日期,格式为年.月.日顺次各占 2 位: 最后 11~13 位是考生编号,范围从 000 到 999. 现给定一系列考生的准考证号和他们的成绩,请你按照要求输出各种统计信息. 输入格式: 输入首先在一行中给出两个正整数 N(≤)和 M(≤),分别为考生人数和统计要求的个数. 接下来 N 行,每行给出一个考生的准考证号和

1141 PAT Ranking of Institutions PAT甲级

After each PAT, the PAT Center will announce the ranking of institutions based on their students’ performances. Now you are asked to generate the ranklist.Input Specification:Each input file contains one test case. For each case, the first line gives

PAT (Advanced Level) 1025. PAT Ranking (25)

简单题. #include<iostream> #include<cstring> #include<cmath> #include<algorithm> #include<cstdio> #include<queue> #include<string> #include<vector> using namespace std; const int maxn=110; int n,tot=0; int sz[m

PAT (Advanced Level) 1075. PAT Judge (25)

简单模拟题. 注意一点:如果一个人所有提交的代码都没编译通过,那么这个人不计排名. 如果一个人提交过的代码中有编译不通过的,也有通过的,那么那份编译不通过的记为0分. #include<cstdio> #include<cstring> #include<cmath> #include<vector> #include<map> #include<stack> #include<queue> #include<str

【PAT甲级】1075 PAT Judge (25 分)

题意: 输入三个正整数N,K,M(N<=10000,K<=5,M<=100000),接着输入一行K个正整数表示该题满分,接着输入M行数据,每行包括学生的ID(五位整数1~N),题号和该题得分(-1表示没通过编译).输出排名,学生ID,总分和每一题的得分,第一优先为总分降序,第二优先为题目AC数降序,第三优先为学生ID升序(提交但未通过编译得分为0,未提交得分为-,不输出没有提交或者提交全都未通过编译的学生信息). trick: 测试点4为有学生先交了得到分的程序后该题后来又交了未通过编译

PAT (Advanced Level) 1025 PAT Ranking

题解 模拟水题. 代码 #include<bits/stdc++.h> using namespace std; struct node { string name; int final_rank,loc_num,loc_rank,grade; node(string name,int loc_num,int grade) { this->name=name; this->loc_num=loc_num; this->grade=grade; } void paixu(int

PAT (Advanced Level) 1075 PAT Judge

题解 模拟. 题目有三种状态. 第一种为题目得到了一定的分数( >= 0): 第二种为题目提交过但是没有通过编译(代码中状态为 -2 ,输出对应 0 ): 第三种题目根本就没提交过(代码中状态为 -1 ,输出对应 ‘-’ ). 考生只要至少有一道题目满足第一种情况,即可将这位考生的信息输出出来. 代码 #include<bits/stdc++.h> using namespace std; int N,K,M,score[6]; struct node { int name,grade[

TS数据流PAT和PMT分析

TS流,是基于packet的位流格式,每个packet是188个字节或者204个字节(一般是188字节,204字节格式是在188字节的packet后面加上16字节的CRC数据,其他格式相同),解析TS流,先解析每个packet ,然后从一个packet中,解析出PAT的PID,根据PID找到PAT包,然后从PAT包中解析出PMT的PID,根据PID找到PMT包,在从PMT包中解析出Video和Audio(也有的包括Teletext和EPG)的PID.然后根据PID找出相应的包. 所有packet