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 }
Problem A

相关文章: