@codeforces - 804F@ Fake bullions

Deadly 提交于 2019-11-28 00:15:32

@description@

有 n 个 gangs,第 i 个 gangs 有 si 个人,编号为 0...si - 1。在所有的人中,有些人曾经通过特殊途径拿到了一根真正的 gold。

现在距离他们拿到 gold 已经过去 \(10^{100}\)(假装他们都不会死)。在这些年中,他们进行了若干次 gold 的交易,方法如下:
这 n 个 gangs 形成了一张竞赛图。在第 i 年,第 u 个 gang 的第 i mod su 个人会向第 v 个 gang 的第 i mod sv 个人发送一根虚假的 gold。
当然是有前提的,前提是 u 有连向 v 的边,且发送者有根 gold(不管是真是假)且接受者没有 gold(不管是真是假)。

现在,这些 gangs 开始贩卖 gold。真实的 gold 显然是可以直接卖出去的,虚假的 gold 可能卖得出去也可能卖不出去。然后,这些 gangs 按照自己贩卖出去的 gold 数量排序(相同的随便排)。
现询问在所有情况(虚假的 gold 卖出去或卖不出去 / gold 数量相同内部排序)下,我从 gold 数量前 a 多的 gangs 中选择大小为 b 的集合,最终可以选出多少可能的集合。

Input
第一行包含三个整数 n, a, b (1 ≤ b ≤ a ≤ n ≤ 5·10^3),含义如上。
接下来 n 行,每行包含一个长度为 n 的 01 串。若第 i 行第 j 列为 1 则有一条 i 到 j 的边。
接下来 n 行,每行一开始一个 si (1 ≤ si ≤ 2·10^6) 含义如上,接着是长度为 si 的 01 串,其中第 j 个数为 1 则第 i 个 gang 的第 j 个人有一根真实的 gold。
(注:题面在此处有误。原题面所说的第 j 个数为 0 表示有 gold,但其实是 1)

Output
输出一个单独整数表示答案 mod 10^9 + 7。

Examples
Input
2 2 1
01
00
5 11000
6 100000
Output
2
Input
5 2 1
00000
10000
11011
11000
11010
2 00
1 1
6 100110
1 0
1 0
Output
5

@solution@

gang,gold,真实......难道......是黄金体验镇魂曲[GoldExperienceRequiem]!乔鲁诺,这也在你的计划之中吗!

题意绕晕人系列。
为什么这么绕呢?因为这个题。。。其实是两个题拼起来的。。。

@part - 1@

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!