PAT 乙级 1040.有几个PAT C++/Java
2024-08-24 16:18:27
字符串 APPAPT
中包含了两个单词 PAT
,其中第一个 PAT
是第 2 位(P
),第 4 位(A
),第 6 位(T
);第二个 PAT
是第 3 位(P
),第 4 位(A
),第 6 位(T
)。
现给定字符串,问一共可以形成多少个 PAT
?
输入格式:
输入只有一行,包含一个字符串,长度不超过1,只包含 P
、A
、T
三种字母。
输出格式:
在一行中输出给定字符串中包含多少个 PAT
。由于结果可能比较大,只输出对 1000000007 取余数的结果。
输入样例:
APPAPT
输出样例:
2
分析:
对于一个确定位置的A来说,形成PAT的个数,就相当于 A左边P的个数 与 A右边T的个数 的成绩
所有先遍历一次字符串,统计T的总个数。
第二次遍历字符串,遇到P,则countP++;遇到A,则countP * countT;遇到T则countT--
为什么要countT--?
遇到一个T,则说明这个T就位于后面的A的左边,不能与后面的A构成PAT
注意,得到的结果还要对1000000007取摸
C++实现
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
#include <string>
#include <cctype>
#include <unordered_map>
using namespace std; int main()
{
string s;
int countT = ;
int countP = ;
int result = ;
int mod = ;
cin >> s;
int len = s.size(); for (int i = ; i < len; ++i)
{
if (s[i] == 'T')
{
countT++;
}
} for (int i = ; i < len; ++i)
{
if (s[i] == 'P')
{
countP++;
}
else if (s[i] == 'T')
{
countT--;
}
else if (s[i] == 'A')
{
result = (result + (countT * countP)) % mod;
}
}
cout << result;
return ;
}
最新文章
- Java多线程 3 线程同步
- MYSQL服务器my.cnf配置文档详解
- windows编程:资源和播放声音
- 【转载】经典SQL语句大全
- NEFU 2016省赛演练一 B题(递推)
- java专业规划(转载)
- Lucene基础(四)-- 结合数据库使用
- 【LeetCode with Python】 Rotate Image
- centos7安装redis3.0和phpredis扩展详细教程(图文)
- 【BZOJ 2844】: albus就是要第一个出场
- Python 常用模块大全(整理)
- webService-cxf框架的使用
- this与回调函数
- C/C++三目运算符
- python 全栈开发,Day32(知识回顾,网络编程基础)
- angular的subscribe
- swddude -- A SWD programmer for ARM Cortex microcontrollers.
- Java子类初始化调用父类无参构造
- Python发送带附件的邮件
- 王彪-20162321-Java程序设计与数据结构2nd-第十周学习总结