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. 安装使用反编译工具ILSPY

    一.ILSPY简介1.1.ILSPY介绍 ILSPY是一款开源.免费的.且适用于.NET平台反编译[C#语言编写的程序和库(.dll)内容]工具:可以集成在Visual Studio 开发工具中,能够 ...

  2. uniapp记录

    1.uniapp获取imei imsi 型号 厂商 https://blog.csdn.net/qq_35620498/article/details/112172115

  3. 第一个helloworld程序

    ; hello.asm section .data msg db "hello, world",13,10,0 section .bss section .text global ...

  4. mysql表关联更新

    UPDATE enterprise_test t1, enterprise_development_relation t2 SET t1.development_area_id = t2.develo ...

  5. dbeaver把表数据导出csv时字符串自动加双引号问题解决

    背景: mysql 5.7 dbeaver 21.1.4 解决:如下图,括起字符这里设置一个 空格(space)即可: 参考1

  6. SQL 查找是否”存在”,别再用 COUNT 了,真的很费时间!

    根据某一条件从数据库表中查询 『有』与『没有』,只有两种状态,那为什么在写SQL的时候,还要SELECT count(*) 呢?无论是刚入道的程序员新星,还是精湛沙场多年的程序员老手,都是一如既往的c ...

  7. linux系统过滤ip地址总结

    Perl模块用法 安装Perl模块 # 官网地址 https://metacpan.org/pod/Regexp::Common # 下载地址 https://cpan.metacpan.org/au ...

  8. AngularJS UI

    1, angular ui 自定义弹框 <script type="text/ng-template" id="stackedModal.html"> ...

  9. Java基础之类型转换

    类型转换 由于Java是强类型语言,所以要进行有些运算的时候,需要用到类型转换 低 --------------------------------------------------------&g ...

  10. variadic templates (数量不定的模板参数)

    void print() {} // 当只剩下一个参数时,args为空,执行这个版本的print template<typename T, typename... Types> void ...