题目描述
XHRlyb和她的小伙伴Cwbc在玩捉迷藏游戏。
Cwbc藏在多个不区分大小写的字符串中。
好奇的XHRlyb想知道,在每个字符串中Cwbc作为子序列分别出现了多少次。
由于Cwbc可能出现的次数过多,你只需要输出每个答案对2000120420010122取模后的结果。
聪明的你在仔细阅读题目后,一定可以顺利的解决这个问题!
输入描述:
输入数据有多行,每行有一个字符串。
输出描述:
输出数据应有多行,每行表示一个答案取模后的结果。
示例1
输入
Cwbc
输出
1
说明
Cwbc作为子序列仅出现了1次。
示例2
输入
acdcecfwgwhwibjbkblcmcnco
输出
81
说明
XHRlyb和她的小伙伴Cwbc在玩捉迷藏游戏。
Cwbc藏在多个不区分大小写的字符串中。
好奇的XHRlyb想知道,在每个字符串中Cwbc作为子序列分别出现了多少次。
由于Cwbc可能出现的次数过多,你只需要输出每个答案对2000120420010122取模后的结果。
聪明的你在仔细阅读题目后,一定可以顺利的解决这个问题!
输入描述:
输入数据有多行,每行有一个字符串。
输出描述:
输出数据应有多行,每行表示一个答案取模后的结果。
示例1
输入
Cwbc
输出
1
说明
Cwbc作为子序列仅出现了1次。
示例2
输入
acdcecfwgwhwibjbkblcmcnco
输出
81
说明
Cwbc作为子序列出现了34=81次。
这道题注意long long和取模,a表示序列c的个数,b表示序列wc的个数,c表示序列bwc的个数,代码:
#include<bits/stdc++.h>
using namespace std;
long long a, b, c;
char q[200010];
int main()
{
while ( ~scanf ( "%s", q ) )
{
int len = strlen ( q );
long long ans = 0;
a = b = c = 0;
for ( int i = 0; i <= len - 1 ; i ++ )
{
if ( q[i] < 'a' )
q[i] = q[i] - 'A' + 'a';
if ( q[i] == 'c' )
{
ans %= 2000120420010122;
ans += c;
a++;
}
else if ( q[i] == 'w' )
{
b += a;
b %= 2000120420010122;
}
else if ( q[i] == 'b' )
{
c += b;
c %= 2000120420010122;
}
}
ans %= 2000120420010122;
cout << ans << endl;
}
return 0; 12 2222
}