PAT 1093 甲级 Count PAT's (25分)

本文介绍了一种使用动态规划算法来计算字符串中特定子串出现次数的方法。通过记录左侧P的数量和右侧T的数量,当遇到A时,计算出包含PAT的所有可能组合。此方法避免了重复计算,提高了效率。

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 number of PAT’s contained in the string.
Input Specification:

Each input file contains one test case. For each case, there is only one line giving a string of no more than 10​5​​ characters containing only P, A, or T.
Output Specification:

For each test case, print in one line the number of PAT’s contained in the string. Since the result may be a huge number, you only have to output the result moded by 1000000007.
Sample Input:

APPAPT

Sample Output:

2

动态规划问题。
利用辅助数组记录已经发生的解,然后根据条件,计算结果。

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>

using namespace std;
string str;
int num = 0;
int leftNumP[100000] = {0};
 

int main() {
	cin>>str;
	for(int i = 0;i < str.size();i++){
		if(i > 0){
			leftNumP[i] = leftNumP[i - 1];
		}
		if(str[i] == 'P'){
			leftNumP[i]++;
		}
	}
	int rightNumT = 0;
	for(int i = str.size() - 1;i >= 0;i--){
		if(str[i] == 'T'){
			rightNumT++;
		}else if(str[i] == 'A'){
			num = (num + leftNumP[i] * rightNumT)%1000000007;
		}
	}
	cout<<num;
	return 0;
}

前辈传送门…

第三方支付功能的技术人员;尤其适合从事电商、在线教育、SaaS类项目开发的工程师。; 使用场景及目标:① 实现微信与支付宝的Native、网页/APP等主流支付方式接入;② 掌握支付过程中关键的安全机制如签名验签、证书管理与敏感信息保护;③ 构建完整的支付闭环,包括下单、支付、异步通知、订单状态更新、退款与对账功能;④ 通过定时任务处理内容支付超时与概要状态不一致问题:本文详细讲解了Java,提升系统健壮性。; 阅读应用接入支付宝和建议:建议结合官方文档与沙微信支付的全流程,涵盖支付产品介绍、开发环境搭建箱环境边学边练,重点关注、安全机制、配置管理、签名核心API调用及验签逻辑、异步通知的幂等处理实际代码实现。重点与异常边界情况;包括商户号与AppID获取、API注意生产环境中的密密钥与证书配置钥安全与接口调用频率控制、使用官方SDK进行支付。下单、异步通知处理、订单查询、退款、账单下载等功能,并深入解析签名与验签、加密解密、内网穿透等关键技术环节,帮助开发者构建安全可靠的支付系统。; 适合人群:具备一定Java开发基础,熟悉Spring框架和HTTP协议,有1-3年工作经验的后端研发人员或希望快速掌握第三方支付集成的开发者。; 使用场景及目标:① 实现微信支付Native模式与支付宝PC网页支付的接入;② 掌握支付过程中核心的安全机制如签名验签、证书管理、敏感数据加密;③ 处理支付结果异步通知、订单状态核对、定时任务补偿、退款及对账等生产级功能; 阅读建议:建议结合文档中的代码示例与官方API文档同步实践,重点关注支付流程的状态一致性控制、幂等性处理和异常边界情况,建议在沙箱环境中完成全流程测试后再上线。
matlab2python 这是一个Python脚本,用于将Matlab文件或代码行转换为Python。此项目处于alpha阶段。 该实现严重依赖于Victor Leikehman的SMOP项目。 当前实现围绕SMOP构建,具有以下差异: 力图生成不依赖libsmop的代码,仅使用如numpy这样的标准Python模块。 使用常见缩写如np而非全称numpy。 尝试重排数组和循环索引,从0开始而不是1。 不使用来自libsmop的外部类matlabarray和cellarray。 增加了对Matlab类的基本支持,类体中声明的属性在构造函数中初始化。 因上述改动,产出代码“安全性较低”,但可能更接近用户自然编写的代码。 实现相对直接,主要通过替换SMOP使用的后端脚本,这里称为smop\backend_m2py.py。 一些函数替换直接在那里添加。 额外的类支持、导入模块以及其他微调替换(或说是黑客技巧)在matlabparser\parser.py文件中完成。 安装 代码用Python编写,可按如下方式获取: git clone https://github.com/ebranlard/matlab2python cd matlab2python # 安装依赖项 python -m pip install --user -r requirements.txt # 让包在任何目录下都可用 python -m pip install -e . # 可选:运行测试 pytest # 可选:立即尝试 python matlab2python.py tests/files/fSpectrum.m -o fSpectrum.py 使用方法 主脚本 存储库根目录下的主脚本可执行,并带有一些命令行标志(部直接取自SMOP)。要将文件file.m转换为file.py,只需输入:
### 关于 PAT 甲级真题 1165 的析 目前并未找到具体针对 PAT 甲级真题编号为 **1165** 的原题内容或详细解析。然而,基于已有的参考资料以及 PAT 考试的特点,可以推测该题目可能涉及常见的算法设计与实现问题。 #### 可能的主题方向 根据以往的 PAT 甲级考试趋势,编号为 **1165** 的题目可能会覆盖以下几个方面之一: - 数据结构操作(链表、树、图等) - 字符串处理 - 数学计算(数化简、质因数解等) - 排序与查找算法的应用 以下是几个常见主题的具体例子及其解决思路: --- ### 示例:字符串处理类问题 如果 **1165** 是关于字符串的操作,则可能是如下形式的问题: > 输入一段文字,统计其中单词的数量并按字典顺序输出这些单词。 解决方案可以通过以下 Python 实现完成: ```python import sys from collections import Counter def count_words(): text = sys.stdin.read().strip() words = re.findall(r'\b\w+\b', text.lower()) word_count = Counter(words) sorted_words = sorted(word_count.items(), key=lambda x: (x[0], -x[1])) result = [] for word, freq in sorted_words: result.append(f"{word} {freq}") return "\n".join(result) print(count_words()) ``` 此代码片段实现了对输入文本中的单词计数功能,并按照字母顺序排列结果[^4]。 --- ### 示例:数据结构应用类问题 假设 **1165** 涉及到二叉树遍历或者构建,则其核心逻辑可参考以下 C++ 实现: ```cpp #include <iostream> #include <vector> using namespace std; struct TreeNode { int val; TreeNode* left; TreeNode* right; }; TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) { if(preorder.empty()) return nullptr; int root_val = preorder[0]; TreeNode* root = new TreeNode{root_val, nullptr, nullptr}; auto it = find(inorder.begin(), inorder.end(), root_val); int index = distance(inorder.begin(), it); vector<int> left_inorder(inorder.begin(), inorder.begin() + index); vector<int> right_inorder(inorder.begin() + index + 1, inorder.end()); vector<int> left_preorder(preorder.begin()+1, preorder.begin()+index+1); vector<int> right_preorder(preorder.begin()+index+1, preorder.end()); root->left = buildTree(left_preorder, left_inorder); root->right = buildTree(right_preorder, right_inorder); return root; } ``` 上述代码展示了如何通过前序和中序序列重建一棵二叉树[^5]。 --- ### 示例:数学运算类问题 对于一些涉及到数简化或其他数学概念的题目,例如约问题,可以用以下方法求解: ```python from math import gcd def reduce_fraction(numerator, denominator): common_divisor = gcd(abs(numerator), abs(denominator)) reduced_num = numerator // common_divisor reduced_denom = denominator // common_divisor if reduced_denom < 0: reduced_num *= -1 reduced_denom *= -1 return f"{reduced_num}/{reduced_denom}" result = reduce_fraction(-8, 12) print(result) # 输出 "-2/3" ``` 这段程序能够有效地将任意给定的母转换成最简形式[^6]。 --- ### 总结说明 虽然当前无法直接获取到 PAT 甲级真题 **1165** 的确切描述,但从过往经验来看,它很可能属于以上提到的一种类型。建议考生多加练习类似的经典习题来提升应考能力。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值