1040 有几个PAT (25 分) -- 测试点3 测试点4
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相关推荐
- C++学习之路 | PTA乙级—— 1040 有几个PAT (25 分)(精简)
1040 有几个PAT (25 分) 字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第 2 位§,第 4 位(A),第 6 位(T):第二个 PAT 是第 3 位§,第 4 位 ...
- 1040 有几个PAT (25 分)
1040 有几个PAT (25 分) 字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第 2 位(P),第 4 位(A),第 6 位(T):第二个 PAT 是第 3 位(P),第 ...
- PAT 乙级 1040 有几个PAT (25分)
1040 有几个PAT (25分) 字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第 2 位§,第 4 位(A),第 6 位(T):第二个 PAT 是第 3 位§,第 4 位( ...
- 1040 有几个PAT (25 分)
1040 有几个PAT (25 分) 字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第 2 位§,第 4 位(A),第 6 位(T):第二个 PAT 是第 3 位§,第 4 位 ...
- 【PAT】乙级 1040 有几个PAT (25 分) c++
1040 有几个PAT (25 分) 字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第 2 位§,第 4 位(A),第 6 位(T):第二个 PAT 是第 3 位§,第 4 位 ...
- 1040 有几个PAT (25分)——18行代码AC
立志用更少的代码做更高效的表达 PAT乙级最优题解-->传送门 字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第 2 位§,第 4 位(A),第 6 位(T):第二个 P ...
- 1040 有几个PAT (25分)
字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第 2 位(P),第 4 位(A),第 6 位(T):第二个 PAT 是第 3 位(P),第 4 位(A),第 6 位(T). 现 ...
- 【PAT乙级】1040 有几个PAT (25 分)
题目地址 #include<bits/stdc++.h> using namespace std; const int N=1e5+10; const int mod=1e9+7; int ...
- 1153 Decode Registration Card of PAT (25分)
1153 Decode Registration Card of PAT (25分) 题意: 给出一组学生的准考证号和成绩 准考证号组成为:考试等级(TAB),考场号(从101到999),考试日期(y ...
最新文章
- 本地windows上传大文件到Linux服务器工具的选择以及使用方法
- Linux笔记-Centos7.6安装Qt5.5.1
- PHP收费事件导致用户流失,PHP秒杀系统方案(解决大流量,高并发)
- 拼多多回应“鼓励刷单”:文章描述有歧义 已删除
- 黑客走开系列1:Python使用元组做函数实参让代码更安全!
- SQLi LABS Less-29
- fiddler之数据统计(statistics)
- 认真学习系列:《深入理解计算机系统》读书笔记
- 面经——算法题数据输入输出
- MySQL Installer 8.0.21安装教程图文详解 转载
- CKFinder 2.0.2 破解小计
- 关于键盘事件对象code值
- 分享21个超棒的单页面HTML作品集展示模板
- 又一个程序员突然倒地,身体这件事一定要警钟长鸣!
- android 高德地图线路规划,路线规划-Android平台-开发指南-高德地图车机版 | 高德地图API...
- win10+Ubuntu20.4双系统安装详细教程(包含bios设置)
- crc16的c语言函数 计算ccitt_求一个C语言实现的CRC16/CCITT-FALSE校验码函数
- Flash&Flex大全
- 让我们旋转跳跃不停歇~~~当3D打印遇上八音盒!(三)
- Algorithm:图片隐藏术—基于加密算法实现图像隐术加密
热门文章
- 新入职了一个卷王,天天加班到凌晨,各种技术张口就来,太让人崩溃......
- ROS机器人操作系统现场培训课程|2017年9月
- 微观机器人会使用激光脉冲穿过人体
- 中科院大牛博士是如何进行文献检索和阅读的(好习惯受益终生)
- Ubuntu: Host Controller not enabled 报错
- Excel一键求得单元格内数值个数的操作!
- 互联网创业如何起步(二)
- “打折”上市的网易云音乐一跌再跌,为何资本市场不买单?
- 单词caement水泥英语
- 深入理解计算机系统 练习题3.8 理解计算机二元操作