**浙大PAT甲级 1093 树状数组
2016-08-31 11:17
417 查看
这个题目求一个字符串中PAT的数目,我们可以这样处理。
对字符串每个字符进行遍历,当字符为P时len1++,当字符为A时,则将len1加入到树状数组中,当字符为T时,对树状数组求和累加并取余。
AC代码:
对字符串每个字符进行遍历,当字符为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 999999999 using 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); }
相关文章推荐
- 浙大pat | 浙大pat 牛客网甲级1061 Insert or Merge (25)判断是插入排序还是归并排序
- 浙大PAT甲级 1033
- 浙大PAT甲级 1038
- *浙大PAT甲级 1089 归并排序与插入排序
- 浙大PAT甲级 1113
- 浙大PAT甲级-1005
- 浙大PAT甲级-1011
- 1093. Count PAT’s (25)-PAT甲级真题
- 浙大Pat | 浙大pat 牛客网甲级 1003 Highest Price in Supply Chain (25)DFS
- 浙大pat | 浙大pat 牛客网甲级1048 Head of a Gang (30)最大强联通分量
- 浙大pat | 牛客网甲级1063 Count PAT's (25)字符串
- 浙大PAT甲级 1035
- *浙大PAT甲级 1060
- 浙大PAT甲级 1090 广搜
- *浙大PAT甲级 1114 并查集
- 浙大 PAT 甲级1009
- 浙大pat甲级 1023
- 浙大pat | 牛客网甲级 1062 To Buy or Not to Buy (20)
- 浙大PAT甲级 1041
- *浙大PAT甲级 1051