C. Yet Another Broken Keyboard
time limit per test

2 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

Recently, Norge found a string s=s1s2…sns=s1s2…sn consisting of nn lowercase Latin letters. As an exercise to improve his typing speed, he decided to type all substrings of the string ss. Yes, all n(n+1)2n(n+1)2 of them!

A substring of ss is a non-empty string x=s[a…b]=sasa+1…sbx=s[a…b]=sasa+1…sb (1≤a≤b≤n1≤a≤b≤n). For example, "auto" and "ton" are substrings of "automaton".

Shortly after the start of the exercise, Norge realized that his keyboard was broken, namely, he could use only kk Latin letters c1,c2,…,ckc1,c2,…,ck out of 2626.

After that, Norge became interested in how many substrings of the string ss he could still type using his broken keyboard. Help him to find this number.

Input

The first line contains two space-separated integers nn and kk (1≤n≤2⋅1051≤n≤2⋅105, 1≤k≤261≤k≤26) — the length of the string ss and the number of Latin letters still available on the keyboard.

The second line contains the string ss consisting of exactly nn lowercase Latin letters.

The third line contains kk space-separated distinct lowercase Latin letters c1,c2,…,ckc1,c2,…,ck — the letters still available on the keyboard.

Output

Print a single number — the number of substrings of ss that can be typed using only available letters c1,c2,…,ckc1,c2,…,ck.

Examples
input

Copy
7 2
abacaba
a b
output

Copy
12
input

Copy
10 3
sadfaasdda
f a d
output

Copy
21
input

Copy
7 1
aaaaaaa
b
output

Copy
0
Note

In the first example Norge can print substrings s[1…2]s[1…2], s[2…3]s[2…3], s[1…3]s[1…3], s[1…1]s[1…1], s[2…2]s[2…2], s[3…3]s[3…3], s[5…6]s[5…6], s[6…7]s[6…7], s[5…7]s[5…7], s[5…5]s[5…5], s[6…6]s[6…6], s[7…7]s[7…7].

还是先学长的
学长原贴: https://www.cnblogs.com/xyq0220/p/12036109.html

学长思路:

在字符串s中所有不能打出的字母的位置作为隔板,隔出来的每个子串(设len为子串的长度)对答案的贡献即为len×(len+1)/2。
 1 #include<bits/stdc++.h>
2 #define fi first
3 #define se second
4 #define lson l,mid,p<<1
5 #define rson mid+1,r,p<<1|1
6 #define pb push_back
7 #define ll long long
8 using namespace std;
9 const int inf=1e9;
10 const int mod=1e9+7;
11 const int maxn=2e5+10;
12 int n,k;
13 char s[maxn],t[30];
14 int main(){
15 ios::sync_with_stdio(false);
16 //freopen("in","r",stdin);
17 cin>>n>>k;
18 cin>>s+1;
19 for(int i=1;i<=k;i++){
20 char c;
21 cin>>c;
22 t[c-'a']=1;
23 }
24 ll ans=0,cnt=0;
25 for(int i=1;i<=n;i++){
26 if(!t[s[i]-'a']){
27 ans+=cnt*(cnt+1)/2;
28 cnt=0;
29 }else ++cnt;
30 }
31 ans+=cnt*(cnt+1)/2;
32 cout<<ans<<endl;
33 return 0;
34 }

我的代码:

 1 #include <bits/stdc++.h>
2 using namespace std;
3 int main(){
4 long long int n,temp=0,k,biao[26],count=0;
5 long long int sum =0;
6 char str[200005],tc;
7 memset(biao,0,sizeof(biao));
8 memset(str,'\0',sizeof(str));
9 cin>>n>>k;
10 temp = n;
11 cin>>str;
12 while(k--){
13 cin>>tc;
14 biao[tc-'a'] = 1;
15 }
16 for(int i = 0;i<n;i++){
17 if(biao[str[i]-'a']){
18 count += 1;
19 }
20 else{
21 sum += count*(count+1)/2;
22 count = 0;
23 }
24 }
25 sum += count*(count+1)/2;
26 cout<<sum<<endl;
27 return 0;
28 }

其实这题又和学长思路一样,把缺的字母当隔板,对每个隔间累加求总值。

可能是这题比较简单(但是比赛我就蒙了???),所以代码差别不大

都用了标记法,这也是这种题的常用手法。

CF1272 C Yet Another Broken Keyboard 题解+代码比对的更多相关文章

  1. uva - Broken Keyboard (a.k.a. Beiju Text)(链表)

    11988 - Broken Keyboard (a.k.a. Beiju Text) You’re typing a long text with a broken keyboard. Well i ...

  2. UVa 11988 Broken Keyboard (a.k.a. Beiju Text)(链表)

    You're typing a long text with a broken keyboard. Well it's not so badly broken. The only problem wi ...

  3. PAT1084:Broken Keyboard

    1084. Broken Keyboard (20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue On a ...

  4. PAT 1084 Broken Keyboard

    1084 Broken Keyboard (20 分)   On a broken keyboard, some of the keys are worn out. So when you type ...

  5. B - Broken Keyboard (a.k.a. Beiju Text) 数组模拟链表

    You're typing a long text with a broken keyboard. Well it's not so badly broken. The only problem wi ...

  6. Broken Keyboard (a.k.a. Beiju Text) 思路

    问题:You’re typing a long text with a broken keyboard. Well it’s not so badly broken. The only problem ...

  7. N - Broken Keyboard (a.k.a. Beiju Text)(DFS,链表)

    N - Broken Keyboard (a.k.a. Beiju Text) Time Limit:1000MS     Memory Limit:0KB     64bit IO Format:% ...

  8. Broken Keyboard(模拟数组或者双重链表的运用)

    这题我是大写的服气,辛辛苦苦搞了个双重链表结果还一直不对,不对就算了,书上源代码打进去还是不对,我能怎么办我也很无奈.不过这题还是让我对双重链表更加了解和运用了!还是可以的! You’re typin ...

  9. UVA——11988 Broken Keyboard (a.k.a. Beiju Text)

    11988 Broken Keyboard (a.k.a. Beiju Text)You’re typing a long text with a broken keyboard. Well it’s ...

  10. 1084. Broken Keyboard (20)【字符串操作】——PAT (Advanced Level) Practise

    题目信息 1084. Broken Keyboard (20) 时间限制200 ms 内存限制65536 kB 代码长度限制16000 B On a broken keyboard, some of ...

随机推荐

  1. easyui datagrid 表头与数据错位

    方法一:容易,实用的方法 在jquery.easyui.min.js中查找到field.replace(/[\.|\s]/g, "-")在其后添加replace 例子:field. ...

  2. 线上服务Java进程假死快速排查、分析

    引用 https://zhuanlan.zhihu.com/p/529350757 最近我们有一台服务器上的Java进程总是在运行个两三天后就无法响应请求了,具体现象如下: 请求业务返回状态码502, ...

  3. 百题计划-4 codeforces 652 div2 D. TediousLee 找规律

    https://codeforces.com/contest/1369/problem/D n<=2e6,所以只要找递推式就可以了,不需要找快速幂 /** */ #include<bits ...

  4. 蓝桥杯训练赛二-2021 问题 G: 坐标排序

    题目描述 请将坐标x,y,z依照以下规则排序: x为第一关键字,当x相同时,依照y(第二关键字)大小来排序,当y相同时,依照z大小来排序(第三关键字) 给出了若干坐标,和一个数k,请输出按关键字排序第 ...

  5. python requests 内置请求模块

  6. 镜像问题、简易安装,系统语言更改,中文输入,提高下载速度,Firefox的语言更改,Firefox上网速度慢

    一开始用的镜像不记得是从哪里下载过来的,反正 装好之后分辨率特别低.镜像放在: "D:\迅雷下载\2020大创\Ubuntu\ubuntu-16.04.6-desktop-i386.iso& ...

  7. 常用软件版本记录 lisoaring

    操作系统 windows XP(2014年4月8日) windows 7(2020年1月14日终止支持) wiindows 10 Internet Explorer 1995-20220507 Fla ...

  8. python 识别登陆验证码图片(完整代码)

    在编写自动化测试用例的时候,每次登录都需要输入验证码,后来想把让python自己识别图片里的验证码,不需要自己手动登陆,所以查了一下识别功能怎么实现,做一下笔记. 首选导入一些用到的库,re.Imag ...

  9. CSP2022 J2参考解析

    目录 P8813 [CSP-J2022] 乘方 P8814 [CSP-J2022] 解密 P8815 [CSP-J2022] 逻辑表达式 P8816 [CSP-J2022] 上升点列 题目传送: P8 ...

  10. stm32 flash/sram 映射关系

    1.可以参考手册里关于Memory map的说明, 里面说明了Flash的起始地址与大小, SRAM起始地址与大小