**浙大PAT甲级 1093 树状数组
来源:互联网 发布:阿里云服务器在哪里 编辑:程序博客网 时间:2024/05/22 12:07
这个题目求一个字符串中PAT的数目,我们可以这样处理。
对字符串每个字符进行遍历,当字符为P时len1++,当字符为A时,则将len1加入到树状数组中,当字符为T时,对树状数组求和累加并取余。
AC代码:
#include<iostream>#include<map>#include<cstdio>#include<algorithm>#include<queue>#include<cstring>#include<list>#include<set>#include<stack>#include<cmath>#include<vector>#define ll long long#define inf 999999999using namespace std;char s[100005];struct tree{ int sum=1; vector<int> m=vector<int>(100000,0); int lowbit(int t) { return t&(-t); } void add(int pos,int num) { while(pos<=100000) { m[pos]+=num; pos+=lowbit(pos); } } int getsum(int x) { int ans=0; while(x) { ans=(ans+m[x])%1000000007; x-=lowbit(x); } return ans; }};int len1=0;int len2=0;int len3=0;tree tr;int main(){ scanf("%s",s); int len=strlen(s); int ans=0; for(int i=0;i<len;i++) { if(s[i]=='P') { len1++; } else if(s[i]=='A') { tr.add(tr.sum,len1); tr.sum++; } else { ans=(ans+tr.getsum(tr.sum-1))%1000000007; } } printf("%d",ans);}
0 0
- **浙大PAT甲级 1093 树状数组
- **浙大PAT甲级 1057 树状数组+二分法
- 浙大pat甲级 1023
- 浙大pat甲级 1024
- 浙大pat甲级 1025
- 浙大PAT甲级 1026
- 浙大PAT甲级 1028
- 浙大PAT甲级 1029
- 浙大PAT甲级 1030
- 浙大PAT甲级 1031
- 浙大PAT甲级 1032
- 浙大PAT甲级 1033
- 浙大PAT甲级 1035
- 浙大PAT甲级 1037
- 浙大PAT甲级 1039
- 浙大PAT甲级 1040
- 浙大PAT甲级 1038
- 浙大PAT甲级 1041
- 友元函数和友元类
- 利用Lab空间把春天的场景改为秋天
- linux 每天一命令------find
- thinkphp与ajax传值
- 5-46 新浪微博热门话题 (30分)
- **浙大PAT甲级 1093 树状数组
- Meshlab配置问题1
- Android error: Failed to install *.apk on device *: timeout
- Qt tip qlabel 如何设置图片,图片大小设置为qlabel等同大小
- CmakeLists.txt protobuf编译
- asp动态网站编程课程体系
- 机器学习的学习历程
- Python 装饰器详解
- JSP脚本标识