CF1622D.Shuffle

普及+/提高

通过率:0%

时间限制:2.00s

内存限制:512MB

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

You are given a binary string (i. e. a string consisting of characters 0 and/or 1) ss of length nn. You can perform the following operation with the string ss at most once: choose a substring (a contiguous subsequence) of ss having exactly kk characters 1 in it, and shuffle it (reorder the characters in the substring as you wish).

Calculate the number of different strings which can be obtained from ss by performing this operation at most once.

给你一个长度为 nn 的二进制字符串(即仅由字符 0 和/或 1 组成的字符串)ss。你最多可以对字符串 ss 执行以下操作一次:选择 ss 的一个子串(即一段连续的子序列),该子串中恰好包含 kk 个字符 1,然后对该子串进行洗牌(即任意重排该子串中的字符)。

请计算:通过对 ss 最多执行一次上述操作,所能得到的不同字符串的总数。

输入格式

The first line contains two integers nn and kk (2≤n≤50002 \le n \le 5000; 0≤k≤n0 \le k \le n).

The second line contains the string ss of length nn, consisting of characters 0 and/or 1.

第一行包含两个整数 nn 和 kk(2≤n≤50002 \le n \le 5000;0≤k≤n0 \le k \le n)。

第二行包含一个长度为 nn 的字符串 ss,由字符 0 和/或 1 组成。

输出格式

Print one integer — the number of different strings which can be obtained from ss by performing the described operation at most once. Since the answer can be large, output it modulo 998244353998244353.

输出一个整数——即通过对字符串 ss 至多执行一次所述操作所能得到的不同字符串的个数。由于答案可能很大,请对 998244353998244353 取模后输出。

输入输出样例

  • 输入#1

    7 2
    1100110

    输出#1

    16
  • 输入#2

    5 0
    10010

    输出#2

    1
  • 输入#3

    8 1
    10001000

    输出#3

    10
  • 输入#4

    10 8
    0010011000

    输出#4

    1

说明/提示

Some strings you can obtain in the first example:

  • to obtain 0110110, you can take the substring from the 11-st character to the 44-th character, which is 1100, and reorder its characters to get 0110;
  • to obtain 1111000, you can take the substring from the 33-rd character to the 77-th character, which is 00110, and reorder its characters to get 11000;
  • to obtain 1100101, you can take the substring from the 55-th character to the 77-th character, which is 110, and reorder its characters to get 101.

In the second example, k=0k = 0 so you can only choose the substrings consisting only of 0 characters. Reordering them doesn't change the string at all, so the only string you can obtain is 10010.

第一个样例中可以得到的一些字符串:

  • 要得到 0110110,可取第 11 个字符到第 44 个字符的子串,即 1100,并重排其字符得到 0110;
  • 要得到 1111000,可取第 33 个字符到第 77 个字符的子串,即 00110,并重排其字符得到 11000;
  • 要得到 1100101,可取第 55 个字符到第 77 个字符的子串,即 110,并重排其字符得到 101。

在第二个样例中,k=0k = 0,因此你只能选择仅由 0 字符组成的子串。重排这些子串不会改变字符串本身,因此唯一能得到的字符串是 10010。

输入解题思路,AI测评打分。不知道怎么写?

首页