NC230509. Duplicate Strings
描述
请你对每个第二种类型的操作输出答案。
输入描述
第一行两个正整数 , 表示字符串长度。
接下来一行一个字符串 ,仅包含小写字母。
接下来 行,每行第一个正整数 表示操作类型。
- ,则后接一个整数 ,表示把 复制 次后接在自己后面。
- ,则后接一个小写字母 ,表示求 中 的出现次数。
输出描述
对每个询问操作输出答案。
示例1
输入:
3 3 aba 1 5 2 a 2 b
输出:
12 6
说明:
第一次操作后,字符串变为 abaabaabaabaabaaba。pypy3 解法, 执行用时: 546ms, 内存消耗: 29144K, 提交时间: 2022-01-20 19:07:37
M = int(1e9 + 7) n, q = map(int, input().split()) s = input() f = [0] * 26 for i in range(26): f[i] = s.count(chr(i + 97)) for i in range(q): a, b = input().split() if int(a) ^ 1: print(f[ord(b) - 97]) else: for i in range(26): f[i] = f[i] * (int(b) + 1) % M
C++ 解法, 执行用时: 104ms, 内存消耗: 1032K, 提交时间: 2022-01-21 00:17:43
#include <bits/stdc++.h> using namespace std; long long i,n,q,k,o,v[200]; string s,c; int main(){ cin>>n>>q>>s; for(i=0;i<n;i++)v[s[i]]++; while(q--){ cin>>o; if(o&1){cin>>k;for(i=95;i<123;i++)(v[i]*=k+1)%=1000000007;} else{cin>>c;cout<<v[c[0]]<<endl;} } }
Python3 解法, 执行用时: 349ms, 内存消耗: 5960K, 提交时间: 2022-01-21 11:08:44
n,q = map(int,input().split()) s = list(input()) sum = 1 num = {} for i in s: num[i] = num.get(i,0)+1 for i in range(q): n,m = input().split() if n == '1': m = int(m) sum += (sum*m)%(10**9+7) else: print((num[m] * sum) % (10**9+7))