#P14756. [Bulgarian2019夏季赛]LightBulbs
[Bulgarian2019夏季赛]LightBulbs
题目描述
Eli 的家里有 L 个灯泡。她可以使用 N 个开关来控制这些灯泡,每个开关控制其中的一个子集。
这套电路系统有一个缺陷:如果 Eli 使用某个开关去点亮一个已经亮着的灯泡,那么这个灯泡会烧坏,之后将再也无法被点亮。
不同灯泡对 Eli 的重要程度不同。例如,地下室里的灯一年只会用到一次,就远不如客厅里的灯重要。她已经把灯泡按重要性从高到低排序:第 1 个灯泡最重要,第 2 个次之,……,第 L 个最不重要。
现在 Eli 想通过使用一个或多个开关,使最终亮着的灯泡集合在“重要性”意义下尽可能优。这里不关心有多少不太重要的灯泡烧坏,只关心亮着的灯泡集合的字典序优先级。
对于两个灯泡集合 A 和 B,我们称 A 比 B 更重要,当且仅当在两者不同的灯泡中,最重要的那个亮着的灯泡属于 A。
例如,设有 5 个灯泡和 3 个开关:
- 第 1 个开关控制第
2, 3, 5个灯泡; - 第 2 个开关控制第
1, 3, 4个灯泡; - 第 3 个开关控制第
2, 4, 5个灯泡。
使用第 2 个开关是有意义的,因为只有它控制最重要的第 1 个灯泡。
如果在此基础上再使用第 1 个开关,则第 3 个灯泡会烧坏,第 2 和第 5 个灯泡亮起。若用 1 表示亮着的灯泡,0 表示未亮或已烧坏的灯泡,并按照灯泡重要性从左到右排列,则结果为:
11011
如果改为使用第 3 个开关,则结果为:
11101
第二种结果更优,因为它们的差异中,最重要的那个灯泡是第 3 个,而它在第二种结果中是亮着的。
如果三个开关全部使用,则结果为:
10000
因为除第 1 个灯泡外,其余每个灯泡都会被至少两个开关点亮,从而烧坏。
请编写程序 Lightbulbs,给定每个开关控制哪些灯泡,求最终能够亮着的、按重要性最优的灯泡集合。
输入格式
第一行输入两个整数 N 和 L,分别表示开关数量和灯泡数量。
接下来 N 行,每行是一个长度为 L 的由 0 和 1 组成的字符串,表示对应开关控制哪些灯泡。
输出格式
输出一个长度为 L 的 01 串,表示最终最优的亮灯集合。
数据范围
1 ≤ N ≤ 501 ≤ L ≤ 50
样例 1
输入
3 5
01101
10110
01011
输出
11101
样例 2
输入
10 20
00010111011100101010
11110001010110011110
00101010100100000100
11000000111011101000
01100101011001100100
11010010110010000100
01111111011000010001
00001010111010011111
11100011101000011011
10001000011001001111
输出
11111101000011000110