#P9657. [ICPC 2021 Macao R] the Matching System

    ID: 9008 远端评测题 3000ms 256MiB 尝试: 0 已通过: 0 难度: 9 上传者: 标签>动态规划,dp2021Special JudgeO2优化前缀和ICPC澳门

[ICPC 2021 Macao R] the Matching System

Description

作为安全部门的负责人,你被要求检查公司的一古老匹配系统。

该系统输入两个字符串,一个待匹配字符串和一个模式字符串,并确定前者是否能匹配后者。前者字符串是严格的二进制字符串(即仅包含 0\textbf{0}1\textbf{1}),而后者字符串由四种类型的字符组成:0\textbf{0}1\textbf{1}*\textbf{*}^,其中 *\textbf{*} 表示匹配零个或多个任意二进制字符,^ 表示匹配恰好一个二进制字符。

该系统有两种匹配方法:最大匹配和最小匹配。

考虑两个字符串的起始位置。最大匹配方法将根据模式字符串的当前字符做出不同的决定:

  • *\textbf{*}: 系统将从 LL00 枚举 ii,其中 LL 是待匹配字符串的剩余长度。在每次枚举开始之前,系统消耗 1 单位的能量。然后它暂时假设模式字符串中的当前 *\textbf{*} 匹配待匹配字符串中的连续 ii 个字符,并尝试递归地匹配两个字符串的剩余位置。只要有一次尝试成功,系统将放弃剩余的枚举并停止整个系统。否则,它将尝试下一个枚举,直到所有尝试都被尝试完毕,最后返回到先前的 *\textbf{*} 枚举。
  • 0,1\textbf{0,1}: 如果待匹配字符串已经耗尽,系统将停止并返回到先前的 *\textbf{*} 枚举。否则,它消耗 11 单位的能量来比较模式字符串和待匹配字符串之间的当前字符。如果结果相同,它将继续分析这两个字符串的剩余位置,否则返回到先前的 *\textbf{*} 枚举。
  • ^: 如果待匹配字符串已经耗尽,系统将停止并返回到先前的 *\textbf{*} 枚举。否则,它消耗 11 单位的能量并继续分析两个字符串。

当模式字符串耗尽时,系统将同时检查待匹配字符串。如果待匹配字符串也已经耗尽,系统将返回“是”并停止整个过程,否则,它将返回到先前的 *\textbf{*} 枚举。在尝试了所有尝试并找不到匹配方法后,系统最终将返回“否”。

最小匹配执行类似的操作,除了 *\textbf{*} 的枚举顺序(即从 00LL 枚举 ii)。

这两种匹配方法似乎不太有效,所以你想黑掉它们。请为每种匹配方法构造一个长度为 nn 的模式字符串和待匹配字符串,使得系统返回“是”,能量消耗尽可能大。

Input Format

每个测试文件中只有一个测试用例。

第一行仅包含一个整数 nn1n1031 \le n \le 10^3),表示需要构造的字符串的长度。

Output Format

请输出最大匹配方法的模式字符串、待匹配字符串和能量消耗的前 33 行。然后输出最小匹配方法的模式字符串、待匹配字符串和能量消耗的后 33 行。

如果有多种构造方式,你可以输出任何一种。

能量消耗可能非常大,所以你需要输出取模 (109+7)(10^9+7) 后的值。请注意,这仅供你方便,你需要在取模之前最大化能量消耗。

3
*0*
011
8
**1
101
7

Hint

题目描述

作为安全部门的负责人,你被要求检查公司的一古老匹配系统。

该系统输入两个字符串,一个待匹配字符串和一个模式字符串,并确定前者是否能匹配后者。前者字符串是严格的二进制字符串(即仅包含 0\textbf{0}1\textbf{1}),而后者字符串由四种类型的字符组成:0\textbf{0}1\textbf{1}*\textbf{*}^,其中 *\textbf{*} 表示匹配零个或多个任意二进制字符,^ 表示匹配恰好一个二进制字符。

该系统有两种匹配方法:最大匹配和最小匹配。

考虑两个字符串的起始位置。最大匹配方法将根据模式字符串的当前字符做出不同的决定:

  • *\textbf{*}: 系统将从 LL00 枚举 ii,其中 LL 是待匹配字符串的剩余长度。在每次枚举开始之前,系统消耗 1 单位的能量。然后它暂时假设模式字符串中的当前 *\textbf{*} 匹配待匹配字符串中的连续 ii 个字符,并尝试递归地匹配两个字符串的剩余位置。只要有一次尝试成功,系统将放弃剩余的枚举并停止整个系统。否则,它将尝试下一个枚举,直到所有尝试都被尝试完毕,最后返回到先前的 *\textbf{*} 枚举。
  • 0,1\textbf{0,1}: 如果待匹配字符串已经耗尽,系统将停止并返回到先前的 *\textbf{*} 枚举。否则,它消耗 11 单位的能量来比较模式字符串和待匹配字符串之间的当前字符。如果结果相同,它将继续分析这两个字符串的剩余位置,否则返回到先前的 *\textbf{*} 枚举。
  • ^: 如果待匹配字符串已经耗尽,系统将停止并返回到先前的 *\textbf{*} 枚举。否则,它消耗 11 单位的能量并继续分析两个字符串。

当模式字符串耗尽时,系统将同时检查待匹配字符串。如果待匹配字符串也已经耗尽,系统将返回“是”并停止整个过程,否则,它将返回到先前的 *\textbf{*} 枚举。在尝试了所有尝试并找不到匹配方法后,系统最终将返回“否”。

最小匹配执行类似的操作,除了 *\textbf{*} 的枚举顺序(即从 00LL 枚举 ii)。

这两种匹配方法似乎不太有效,所以你想黑掉它们。请为每种匹配方法构造一个长度为 nn 的模式字符串和待匹配字符串,使得系统返回“是”,能量消耗尽可能大。

输入格式

每个测试文件中只有一个测试用例。

第一行仅包含一个整数 nn1n1031 \le n \le 10^3),表示需要构造的字符串的长度。

输出格式

请输出最大匹配方法的模式字符串、待匹配字符串和能量消耗的前 33 行。然后输出最小匹配方法的模式字符串、待匹配字符串和能量消耗的后 33 行。

如果有多种构造方式,你可以输出任何一种。

能量消耗可能非常大,所以你需要输出取模 (109+7)(10^9+7) 后的值。请注意,这仅供你方便,你需要在取模之前最大化能量消耗。

翻译来自于:ChatGPT

题面翻译由 ChatGPT-4o 提供。