Problem A:QAQ
给一个字符串,求出可非连续的QAQ序列有多少个。
Analysis:比较水的一道题,记录每一个Q的位置,预处理A的个数即可
然而还是fst了,原因是未考虑一个Q都没有的极端情况,导致vector().size-1溢出!
以后一定要注意,当对unsigned int类型的vector().size作减法时考虑是否可能出现负数情况
1 #include <bits/stdc++.h> 2 3 using namespace std; 4 int cnt[105]; 5 string s; 6 vector<int> q; 7 8 int main() 9 { 10 cin >> s; 11 for(int i=0;i<s.size();i++) 12 { 13 cnt[i+1]=cnt[i]; 14 if(s[i]=='A') cnt[i+1]++; 15 else if(s[i]=='Q') q.push_back(i+1); 16 } 17 18 if(!q.size()) cout << 0,return 0; //对极端情况要特殊考虑 19 //因为vector.size()是unsigned int,减1时会溢出 20 int res=0; 21 for(int i=0;i<q.size()-1;i++) 22 for(int j=i+1;j<q.size();j++) 23 { 24 int x=q[i],y=q[j]; 25 res+=(cnt[y]-cnt[x]); 26 } 27 cout << res; 28 29 return 0; 30 }