#P16550. [Bapc2024]Disgruntled Diner
[Bapc2024]Disgruntled Diner
题目背景
Diana 是 Batavian Authentic Prestigious Cuisine 餐厅的主厨。所有订单都会记录在中央计算机中;为了组织厨房工作,每一道被点的菜还会单独打印在一张小票上。
每张小票的一面写着菜品,用一个大写英文字母表示;另一面写着桌号,用一个数字表示。某张小票对应的菜品为 L、桌号为 d 时,记作小票 Ld。同一桌可能多次点同一道菜,因此完全相同的小票可以出现多次。
一道菜完成后,Diana 会把对应小票钉到公告板上。公告板上的每张小票只有一面朝外,因此当前只能看到它的菜品或桌号之一。
题目描述
服务进行到一半时,一位不满的顾客抱怨道:
“我们已经等了好几个小时,但到现在只上过番茄汤!能不能快一点?”
设这位顾客所在的桌号为 t,他所声称唯一收到的菜品为 m。Diana 需要验证以下命题:
公告板上所有属于桌号
t的小票,其菜品都为m。
形式化地说,对于公告板上的每张完整小票 Ld,均应满足
如果公告板上没有任何属于桌号 t 的小票,Diana 也认为该命题为真。
Diana 知道中央计算机中记录的全部订单,也知道公告板上的小票一定对应这些订单中的一个子多重集。但是,由于每张公告板小票只露出一面,她可能需要翻开若干张小票才能确定命题究竟为真还是为假。
你需要帮助 Diana:
- 如果不翻任何小票就能证明命题为真,输出
true; - 如果不翻任何小票就能证明命题为假,输出
false; - 否则,找出一个需要翻开的公告板小票集合,使得翻开这些小票后一定可以判断该命题的真假,并令集合大小最小。
所有需要翻开的小票必须在真正翻票之前一次性决定,不能根据翻开后的结果再临时选择其他小票。
输入格式
输入包含四部分:
- 第一行包含两个整数 (),分别表示中央计算机中的订单数量和公告板上的小票数量。
- 第二行包含 个字符串,表示计算机中的全部订单。每个字符串由一个大写英文字母
A–Z和一个数字0–9组成。 - 第三行包含 个字符,依次表示公告板上各张小票当前朝外的一面。每个字符为一个大写英文字母或一个数字。
- 第四行包含一个数字
t和一个大写英文字母m,表示需要验证的命题:“桌号t的所有已完成菜品均为m。”
保证公告板上的小票可以与计算机中的某个订单子多重集一一对应。
输出格式
如果无需翻开任何小票就能证明命题为真,输出:
true
如果无需翻开任何小票就能证明命题为假,输出:
false
否则,先输出必须翻开的小票数量,然后输出这些小票在公告板上的编号。编号从 开始,顺序任意。
如果存在多个最小方案,可以输出任意一个。
本题答案可能不唯一。在 Hydro OJ 中部署时需要使用 Special Judge 检查方案的最小性与合法性。
样例 1
输入
6 4
A1 A2 B1 B2 C1 C2
A B 1 2
1 A
输出
2
3 2
样例 2
输入
5 4
A1 B1 C2 C1 A2
2 A B 1
1 A
输出
false
样例 3
输入
4 4
Z0 Z0 F9 F9
Z 0 9 9
4 F
输出
true