D. [Sleeping Cup #8] Sorrowful Substrings

    传统题 文件IO:sorrow 1000ms 512MiB

[Sleeping Cup #8] Sorrowful Substrings

该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。

负责人

注意

本题需要使用文件读写(sorrow.in / sorrow.out)。

本题中 S[l,r]\bm{S_{[l,r]}} 表示截取字符串 S\bm S 的第 l,l+1,,r\bm{l,l+1,\ldots,r} 个字符所得到的子串。

一个字符串 S\bm S 被称为「23 串」,当且仅当 S\bm S 不包含除 2\tt 23\tt 3 以外的任何字符。

同一序列 {SL}\bm{\{S_L\}} 的两个子序列 $\bm{\{P_n\}=[S_{i_1},S_{i_2},\ldots,S_{i_n}]\ (1\le i_1<i_2<\ldots<i_n\le L)}$ 和 $\bm{\{Q_m\}=[S_{j_1},S_{j_2},\ldots,S_{j_m}]\ (1\le j_1<j_2<\ldots<j_m\le L)}$ 本质不同,当且仅当集合 {i1,i2,,in}\bm{\{i_1,i_2,\ldots,i_n\}}{j1,j2,,jm}\bm{\{j_1,j_2,\ldots,j_m\}} 不相等。请注意,这并不意味着序列 {Pn}\bm{\{P_n\}}{Qm}\bm{\{Q_m\}} 一定不相等。

本题中 k\bm k 的值超过了 64 位有符号整数(以及 64 位无符号整数)的存储范围,建议使用 C++14(或更高版本)中引入的 __int128 扩展数据类型进行存储。请注意,不要使用 __int128 类型的变量(或常量)作为参数调用 cmathmath.h)库中的函数(如绝对值函数 abs,算术平方根函数 sqrt 等),否则可能会导致编译错误。

你可以使用以下代码(使用时需要包含 <cstdio><bits/stdc++.h> 头文件),并用 read() 读入一个 __int128 类型的正整数,用 readline() 读入一行一个 23 串(该函数返回一个 std::string 类型的字符串,使用时需要包含 <string><bits/stdc++.h> 头文件),用 writeline(x) 输出一行一个 __int128 类型的非负整数 x\bm x。请注意,不要将以下代码和其他输入输出方式混用:

inline __int128 read()
{
	__int128 x = 0;
	char c = getchar_unlocked();
	while (c < '0') c = getchar_unlocked();
	while (c >= '0')
	{
		x = x * 10 + c - '0';
		c = getchar_unlocked();
	}
	return x;
}
inline std::string readline()
{
	std::string x = "";
	char c = getchar_unlocked();
	while (c < '0') c = getchar_unlocked();
	while (c >= '0')
	{
		x += c;
		c = getchar_unlocked();
	}
	return x;
}
void write(__int128 x)
{
	if (x <= 9)
	{
		putchar_unlocked(x + '0');
		return;
	}
	write(x / 10);
	putchar_unlocked(x % 10 + '0');
}
inline void writeline(__int128 x)
{
	write(x);
	putchar_unlocked('\n');
}

题目描述

对于一个长度为 tt 的非空 23 串 RR,定义其权值 f(S)f(S) 为:

$$f(R)=\sum_{i_1=1}^t\sum_{i_2=1}^t\sum_{i_3=1}^t\sum_{i_4=1}^t[R_{i_1}=R_{i_2}=R_{i_3}=\texttt 3\land R_{i_4}=\texttt 2\land i_1<i_2<i_3<i_4]$$

RR 中本质不同的子序列 {3,3,3,2}\{\texttt 3,\texttt 3,\texttt 3,\texttt 2\} 的个数。

定义一个非空 23 串 TT 是「不开心的」,当且仅当 f(T)kf(T) \ge k

现给定一个长度为 nn 的 23 串 SS,求 SS 中「不开心的」非空子串的数量。

输入格式

第一行两个正整数 n,k (1n106,1k1024)n,k\ (1 \le n \le 10^6, 1 \le k \le 10^{24})

第二行一个长度为 nn 的 23 串 SS

输出格式

一行一个非负整数表示答案。

样例

20 16
32323232323232323232
41

样例解释

「不开心的」非空子串有:

  • S[1,12],S[1,13],,S[1,20]S_{[1,12]},S_{[1,13]},\ldots,S_{[1,20]}(共有 2012+1=920-12+1=9 个)
  • S[2,14],S[2,15],,S[2,20]S_{[2,14]},S_{[2,15]},\ldots,S_{[2,20]}(共有 2014+1=720-14+1=7 个)
  • S[3,14],S[3,15],,S[3,20]S_{[3,14]},S_{[3,15]},\ldots,S_{[3,20]}(共有 2014+1=720-14+1=7 个)
  • S[4,16],S[4,17],,S[4,20]S_{[4,16]},S_{[4,17]},\ldots,S_{[4,20]}(共有 2016+1=520-16+1=5 个)
  • S[5,16],S[5,17],,S[5,20]S_{[5,16]},S_{[5,17]},\ldots,S_{[5,20]}(共有 2016+1=520-16+1=5 个)
  • S[6,18],S[6,19],S[6,20]S_{[6,18]},S_{[6,19]},S_{[6,20]}(共有 33 个)
  • S[7,18],S[7,19],S[7,20]S_{[7,18]},S_{[7,19]},S_{[7,20]}(共有 33 个)
  • S[8,20]S_{[8,20]}(共有 11 个)
  • S[9,20]S_{[9,20]}(共有 11 个)

故答案为:

9+7+7+5+5+3+3+1+1=419+7+7+5+5+3+3+1+1=41

Sleeping Cup #8 (CFCOI Round 1 / Goodbye 2025)

未参加
状态
已结束
规则
Sleeping Cup
题目
7
开始于
2025-12-13 0:00
结束于
2026-1-26 0:00
持续时间
2 小时
主持人
参赛人数
12