logo AlgoBeat OnlineJudge
登录 注册

#10060. [CSP-S 2025] 员工招聘

内存限制:512 MiB 时间限制:1000 ms 输入文件:employ.in 输出文件:employ.out
题目类型:传统 评测方式:文本比较
上传者: AlgoBeat 官方账号

题目描述

小 Z 和小 H 想要合伙开一家公司,共有 人前来应聘,编号为 。小 Z 和小 H 希望录用至少 人。

小 H 是面试官,将在接下来 天每天面试一个人。小 Z 负责决定应聘人前来面试的顺序。具体地,小 Z 可以选择一个 的排列 ,然后在第 () 天通知编号为 的人前来面试。

小 H 准备了 套难度不一的面试题。由于 个前来应聘的人水平大致相同,因此对于同一套题,所有人的作答结果是一致的。具体地,第 () 天的面试题的难度为 ,其中 表示这套题的难度较高,没有人能够做出; 表示这套题的难度较低,所有人都能做出。小 H 会根据面试者的作答结果决定是否录用,即如果面试者没有做出面试题,则会拒绝,否则会录用。

然而,每个人的耐心都有一定的上限,如果在他面试之前未录用的人数过多,则他会直接放弃参加面试。具体地,编号为 () 的人的耐心上限可以用非负整数 描述,若在他之前已经有不少于 人被拒绝或放弃参加面试,则他也将放弃参加面试。

小 Z 想知道一共有多少种面试的顺序 能够让他们录用至少 人。你需要帮助小 Z 求出,能够录用至少 人的排列 的数量。由于答案可能较大,你只需要求出答案对 取模后的结果。

输入格式

输入的第一行包含两个正整数 ,分别表示前来应聘的人数和希望录用的人数。

输入的第二行包含一个长度为 的字符串 ,表示每一天的面试题的难度。

输入的第三行包含 个非负整数 ,表示每个人的耐心上限。

输出格式

输出一行一个非负整数,表示能够录用至少 人的排列 的数量对 取模后的结果。

样例

输入 #1

3 2
101
1 1 2

输出 #1

2

输入 #2

10 5
1101111011
6 0 4 2 1 2 5 4 3 3

输出 #2

2204128

数据范围与提示

【样例 1 解释】

共有以下 2 种面试的顺序 能够让小 Z 和小 H 录用至少 2 人:

  1. , 依次录用编号为 1 的人和编号为 3 的人;
  2. , 依次录用编号为 2 的人和编号为 3 的人。

【样例 3】

见选手目录下的

该样例满足测试点 6 ~ 8 的约束条件。

【样例 4】

见选手目录下的

该样例满足测试点 12 ~ 14 的约束条件。

【样例 5】

见选手目录下的

该样例满足测试点 18 ~ 21 的约束条件。

【数据范围】

对于所有测试数据,保证:

  • ;
  • 对于所有 ,均有 ;
  • 对于所有 ,均有

::cute-table{tuack}

测试点编号 特殊性质
^ ^
A
^
^
^
A
^ B

特殊性质 A: 对于所有 ,均有

特殊性质 B: 在 中最多只有 18 个取值为 1,即