列表

详情


NC15669. 躲藏

描述

XHRlyb和她的小伙伴Cwbc在玩捉迷藏游戏。
Cwbc藏在多个不区分大小写的字符串中。
好奇的XHRlyb想知道,在每个字符串中Cwbc作为子序列分别出现了多少次。
由于Cwbc可能出现的次数过多,你只需要输出每个答案对2000120420010122取模后的结果。
聪明的你在仔细阅读题目后,一定可以顺利的解决这个问题!

输入描述

输入数据有多行,每行有一个字符串。

输出描述

输出数据应有多行,每行表示一个答案取模后的结果。

示例1

输入:

Cwbc

输出:

1

说明:

Cwbc作为子序列仅出现了1次。

示例2

输入:

acdcecfwgwhwibjbkblcmcnco

输出:

81

说明:

Cwbc作为子序列出现了34=81次。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 93ms, 内存消耗: 1660K, 提交时间: 2018-06-04 15:45:07

#include<iostream>
#include<cstring>
using namespace std;
typedef long long ll;
const ll mod=2000120420010122;

int main()
{
	string s;
	while(cin>>s)
	{
		ll c=0,w=0,b=0,sum=0;
		for(int i=0;i<s.length();i++)
		{
			if(s[i]=='w'||s[i]=='W')w+=c;
			else if(s[i]=='b'||s[i]=='B')b+=w;
			else if(s[i]=='c'||s[i]=='C')
			{
				c++;
				sum+=b;
				sum=sum%mod;
			}
		}
		cout<<sum<<endl;
	}
	return 0;
}

C++11(clang++ 3.9) 解法, 执行用时: 105ms, 内存消耗: 752K, 提交时间: 2018-05-13 11:37:58

#include<iostream>
typedef long long ll;
#define Mod 2000120420010122;
using namespace std;
ll a,b,c,d;
int main(){
	string s;
	while(cin>>s){
        a=b=c=d=0;
		for(int i=0;i<s.size();i++){
			if(s[i]=='c'||s[i]=='C'){
				a++,d+=c;
				d%=Mod;
			}
			else if(s[i]=='w'||s[i]=='W')b+=a;
			else if(s[i]=='b'||s[i]=='B')c+=b;
		}
		cout<<d<<endl;
	}
}

Python3(3.5.2) 解法, 执行用时: 494ms, 内存消耗: 4336K, 提交时间: 2020-08-16 17:21:48

while 1:
    try:
        s=input()
        s1=s2=s3=s4=0
        for i in s:
            i=i.lower()
            if i=='c':
                s1+=1
                s4+=s3
            elif i=='w':
                s2+=s1
            elif i=='b':
                s3+=s2
        print(s4%2000120420010122)
    except:
        break

上一题