3563: 有几个ACM
题目描述
有一群人非常喜欢ACM比赛,只要是跟ACM相关的东西他们都非常在意。有一天,他们在YTU的校园里看到了一个仅由”A”、”C”、”M”这三个字符组成的横幅。一时兴起,他们想要知道这个横幅里出现了几次”ACM”,你也是其中的一员,请编写一个程序解决这个问题。
输入
输入只有一行,包含一个字符串s(length(s)<=105),只含有A、C、M这三种字母。
输出
在一行中输出给定的字符串中含有多少个ACM。最终的结果可能比较大,请对结果用1000000007取余。
样例输入
copy
CAACAM
样例输出
2
提示
样例解释:
字符串CAACAM中包含了两个ACM,其中
第一个ACM是字符的第2位(A),第4位©,第6位(M);
第二个ACM是字符的第3位(A),第4位©,第6位(M)。
思路:
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;
getline(cin,s);
int a=0,c=0,ans=0;
for(int i=0;i<s.length();i++)
{
if(s[i]=='A')
a++;
else if(s[i]=='C')
c+=a;
else if(s[i]=='M')
ans=(ans+c)%1000000007;
}
cout<<ans%1000000007;
return 0;
}