IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> PTA(乙级)1040 有几个PAT(C语言) -> 正文阅读

[C++知识库]PTA(乙级)1040 有几个PAT(C语言)

1040 有几个PAT (25 分)

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

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

输入格式:

输入只有一行,包含一个字符串,长度不超过105,只包含?PAT?三种字母。

输出格式:

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

输入样例:

APPAPT

结尾无空行

输出样例:

?

2

结尾无空行

思路:

? ? ? ? 遍历暴力解会导致时间超时

? ? ? ? 问题关键在于要先有P,再有A,最后再有T;才能组成一个PAT。同时也可以注意到,

????????组合数 = 在前面的P的数量 * 在中间的A的数量 * 在后面的T的数量

? ? ? ? 这样算出每一个的数量过于复杂,所以不妨换个思路, 我们不必先求出合适P,A,T的数量,而是在遇到P,A,T时对数据先进行处理,已经知道要先有P,再有A,最后再有T,所以我们不妨先从后面来遍历字符串数组,遇到T时让T的数量t+1;遇到A时y += 1*t,同时让 a = 0一个A只能与同一个T组合一次); 当遇到T时,再 sum += 1*y(一个T只能与同一组A和T组合一次);

这样便可以得出结果

代码详细

#include<stdio.h>
#include<string.h>
//#include<malloc.h>
#define MOD 1000000007
int main() {
	char x[100000];
	scanf("%s",x);
	int t = strlen(x);
	//int *A, *T;
	//A = (int* )malloc(sizeof(int)* t);
	//T = (int* )malloc(sizeof(int)* t);
	int i, j, tmp1, tmp2 ;
	long long int y = 0;
	long long int sum = 0;
	tmp1 = 0;
	tmp2 = 0;
	for(i= t-1; i >= 0; i--) {
		
		if(x[i] == 'A') {
			//tmp1++;
			//y += (tmp1 * tmp2) % MOD;//防止PTA 
			//tmp1 = 0;//PTATA
			y += tmp2 % MOD;
		} else if( x[i] == 'T') {
			tmp2++;
		} else if(x[i] == 'P') {
			sum = (sum + y) % MOD;
			//tmp1 = 0;
			//tmp2 = 0;
		}

	}

	printf("%d",sum);
	return 0;

}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-28 12:13:13  更:2021-10-28 12:13:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:01:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码