Решение задачи "Очередная сломанная клавиатура" с Codeforces

Без пояснения   Просмотров: 16


Недавно Norge нашел строку s=s1s2…sn, состоящую из n строчных букв латинского алфавита. В качестве упражнения для улучшения скорости печатания он решил напечатать все подстроки s. Да, все n(n+1)2 из них!

Подстрокой строки s называется непустая строка x=s[a…b]=sasa+1…sb (1≤a≤b≤n). Например, «auto» и «ton» являются подстроками «automaton».

Незадолго до начала упражнения Norge осознал, что его клавиатура сломана, а если говорить более точно, он может использовать только k латинских букв c1,c2,…,ck из 26.

После этого Norge стало интересно, как много подстрок строки s он сможет написать, используя свою сломанную клавиатуру. Помогите ему найти это число.

Код

# include <bits/stdc++.h>

using namespace std;

long long n,m,z,an;
char x;
string s;
long long v[999];


int main(){
	cin>>n>>m;
	cin>>s;
	scanf("\n%c",&x),v[x]=1;
	for(long long i=1;i<m;i++)
	scanf(" %c",&x),v[x]=1;
	for(long long i=0;i<n;i++){
		if(v[s[i]]==0){
			an=an+z*(z+1)/2;
			z=0;
		}
		else z++;
	}
	an=an+z*(z+1)/2;
	cout<<an;
}

         

 Администратор Photo Автор: Администратор


Отправить решение задачи
Чтобы отправить решение вам нужно войти в систему или зарегистрироваться

Комментарии

Чтобы написать комментарии вам нужно войти в систему или зарегистрироваться