1040 有几个PAT (25 分)

字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第 2 位(P),第 4 位(A),第 6 位(T);第二个 PAT 是第 3 位(P),第 4 位(A),第 6 位(T)。

现给定字符串,问一共可以形成多少个 PAT?

输入格式:
输入只有一行,包含一个字符串,长度不超过 1 0 5 10^5 105,只包含 P、A、T 三种字母。

输出格式:
在一行中输出给定字符串中包含多少个 PAT。由于结果可能比较大,只输出对 1000000007 取余数的结果。

输入样例:

APPAPT

输出样例:

2

题解

这个题最初思路为:假设某个A的前面字母P的个数a和A的后面字母T的个数b,a*b是当前A位置PAT的个数,分别统计每个A的情况。然后惊奇发现超时。。。

转变策略,先查出所有T 的量,然后开始遍历,时刻更新已出现P的量,且出现过 的T要减掉,遇到A就计算A的量和P的量相乘然后累加即可。
从运算速度上看好像switch比if快一些,因为switch只需要取出一次变量,然后进行多次比较操作;而if每一次比价都需要取出变量就会慢一些,当然这个题if也可以通过。

测试点3、测试点4如果不过,记得要对输出 取1000000007余数


AC例程

switch的写法

#include <iostream>
#include <stdio.h>
using namespace std;
int main() {string str;int countT=0,countP=0;long long sum=0;getline(cin,str);for(int i=0;i<str.length();i++)if(str[i]=='T')++countT;for(int i=0;i<str.length();i++)switch (str[i]) {case 'P':++countP;break;case 'T':--countT;break;case 'A':sum += countP * countT;break;}cout<<sum%1000000007<<endl;return 0;
}

if的写法

#include <iostream>
#include <stdio.h>
using namespace std;
int main() {string str;int countT=0,countP=0;long long sum=0;getline(cin,str);for(int i=0;i<str.length();i++)if(str[i]=='T')++countT;for(int i=0;i<str.length();i++) {if (str[i] == 'P')++countP;else if (str[i] == 'T')--countT;else if (str[i] == 'A')sum += countP * countT;}cout<<sum%1000000007<<endl;return 0;
}

1040 有几个PAT (25 分) -- 测试点3 测试点4相关推荐

  1. C++学习之路 | PTA乙级—— 1040 有几个PAT (25 分)(精简)

    1040 有几个PAT (25 分) 字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第 2 位§,第 4 位(A),第 6 位(T):第二个 PAT 是第 3 位§,第 4 位 ...

  2. 1040 有几个PAT (25 分)

    1040 有几个PAT (25 分) 字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第 2 位(P),第 4 位(A),第 6 位(T):第二个 PAT 是第 3 位(P),第 ...

  3. PAT 乙级 1040 有几个PAT (25分)

    1040 有几个PAT (25分) 字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第 2 位§,第 4 位(A),第 6 位(T):第二个 PAT 是第 3 位§,第 4 位( ...

  4. 1040 有几个PAT (25 分)

    1040 有几个PAT (25 分) 字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第 2 位§,第 4 位(A),第 6 位(T):第二个 PAT 是第 3 位§,第 4 位 ...

  5. 【PAT】乙级 1040 有几个PAT (25 分) c++

    1040 有几个PAT (25 分) 字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第 2 位§,第 4 位(A),第 6 位(T):第二个 PAT 是第 3 位§,第 4 位 ...

  6. 1040 有几个PAT (25分)——18行代码AC

    立志用更少的代码做更高效的表达 PAT乙级最优题解-->传送门 字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第 2 位§,第 4 位(A),第 6 位(T):第二个 P ...

  7. 1040 有几个PAT (25分)

    字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第 2 位(P),第 4 位(A),第 6 位(T):第二个 PAT 是第 3 位(P),第 4 位(A),第 6 位(T). 现 ...

  8. 【PAT乙级】1040 有几个PAT (25 分)

    题目地址 #include<bits/stdc++.h> using namespace std; const int N=1e5+10; const int mod=1e9+7; int ...

  9. 1153 Decode Registration Card of PAT (25分)

    1153 Decode Registration Card of PAT (25分) 题意: 给出一组学生的准考证号和成绩 准考证号组成为:考试等级(TAB),考场号(从101到999),考试日期(y ...

最新文章

  1. 本地windows上传大文件到Linux服务器工具的选择以及使用方法
  2. Linux笔记-Centos7.6安装Qt5.5.1
  3. PHP收费事件导致用户流失,PHP秒杀系统方案(解决大流量,高并发)
  4. 拼多多回应“鼓励刷单”:文章描述有歧义 已删除
  5. 黑客走开系列1:Python使用元组做函数实参让代码更安全!
  6. SQLi LABS Less-29
  7. fiddler之数据统计(statistics)
  8. 认真学习系列:《深入理解计算机系统》读书笔记
  9. 面经——算法题数据输入输出
  10. MySQL Installer 8.0.21安装教程图文详解 转载
  11. CKFinder 2.0.2 破解小计
  12. 关于键盘事件对象code值
  13. 分享21个超棒的单页面HTML作品集展示模板
  14. 又一个程序员突然倒地,身体这件事一定要警钟长鸣!
  15. android 高德地图线路规划,路线规划-Android平台-开发指南-高德地图车机版 | 高德地图API...
  16. win10+Ubuntu20.4双系统安装详细教程(包含bios设置)
  17. crc16的c语言函数 计算ccitt_求一个C语言实现的CRC16/CCITT-FALSE校验码函数
  18. Flash&Flex大全
  19. 让我们旋转跳跃不停歇~~~当3D打印遇上八音盒!(三)
  20. Algorithm:图片隐藏术—基于加密算法实现图像隐术加密

热门文章

  1. 新入职了一个卷王,天天加班到凌晨,各种技术张口就来,太让人崩溃......
  2. ROS机器人操作系统现场培训课程|2017年9月
  3. 微观机器人会使用激光脉冲穿过人体
  4. 中科院大牛博士是如何进行文献检索和阅读的(好习惯受益终生)
  5. Ubuntu: Host Controller not enabled 报错
  6. Excel一键求得单元格内数值个数的操作!
  7. 互联网创业如何起步(二)
  8. “打折”上市的网易云音乐一跌再跌,为何资本市场不买单?
  9. 单词caement水泥英语
  10. 深入理解计算机系统 练习题3.8 理解计算机二元操作