[编程题]有几个PAT(25)
发布日期:2021-05-07 23:12:03 浏览次数:22 分类:精选文章

本文共 1021 字,大约阅读时间需要 3 分钟。

关键词:递推关系,动态规划

试题链接:
https://www.nowcoder.com/questionTerminal/5e7d025e91ab468f909cb93d431b89c3
问题描述:
在这里插入图片描述
根据算法笔记上的思路:
对于每一个A,其左侧所有P的数目与其右侧所有T的数目相乘得到的结果即为这个A能够组成的pat数,统计所有A能够组成的pat数求和,即为题目的答案。

备注:

最好每次相加的时候都能够取一次模,不然可能有溢出的风险。

解决方案:

#include
#include
using namespace std;const int maxn=100010;const int mod=1000000007;//算法笔记思路:寻找每一个A左边的P的个数和右边的T的个数int main(){ char str[maxn]; int leftP[maxn]={ 0}; int ans=0,rightT=0; //获取输入字符串 cin>>str; int len=strlen(str); for(int i=0;i
=0;i--){ //从右向左遍历字符串 //当前字符为T则计数+1 if(str[i]=='T'){ rightT++; //当前字符为A则左边P数与右边T数相乘得到当前A可组成pat的结果 }else if(str[i]=='A'){ ans=(ans+leftP[i]*rightT)%mod;//每次都要取余,否则可能溢出 } } cout<

代码简化:

#include
#include
using namespace std;const int maxn=100010;const int mod=1000000007;//参考大佬简练的代码int main(){ char str[maxn]; int p=0,pa=0,pat=0; //获取输入字符串 cin>>str; int len=strlen(str); for(int i=0;i
上一篇:[编程题]1019. 数字黑洞 (20)
下一篇:[编程题]整数无序数组求第K大数

发表评论

最新留言

很好
[***.229.124.182]2025年04月10日 15时14分17秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章