测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A22928. 字符数对

填空题 较难

题目描述

字符数对

题目描述

给定一个由字符 o 和 x 组成的长度为 N 的字符串 S。

请计算满足以下所有条件的整数对 (l, r) 的数量:

   1 ≤ l ≤ r ≤ N;

   在字符串 S 的子串 S[l..r](从第 l 个字符到第 r 个字符)中,同时包含 o 和 x 两种字符。

输入格式

第一行,一个整数 N;

第二行,一个字符串 S。

输出格式

输出满足条件的整数对的数量。

输入样例#1

4  
oxxo

输出样例#1

5

输入样例#2

7  
xoxooxx

输出样例#2

19

参考答案

#include <iostream> int main() { int64_t N; std::string S; std::cin >> N >> S; S.push_back('!'); int64_t result = N * N; char last_c = S[0]; int64_t last_id = 0; for (int64_t i = 1; i <= N; i++) { if (S[i] == last_c) continue; result -= (i - last_id) * (i - last_id); last_id = i; last_c = S[i]; } std::cout << result / 2 << std::endl; }
上一题 下一题