NC15669. 躲藏
描述
输入描述
输入数据有多行,每行有一个字符串。
输出描述
输出数据应有多行,每行表示一个答案取模后的结果。
示例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