#P8853. [NOI1997] 文件匹配

[NOI1997] 文件匹配

题目背景

此为上古NOI原题,未证明有无靠谱的正解可以通过。

在计算机的日常操作中,经常需要对当前回录下的所有文件中的一部分文件进行操作。例如,将当前目录下的所有文本文件复制至另一个目录下、将当前目录下所有以 a 打头的文件删除; 等等。

题目描述

很多操作系统都采用正则表达式来实现文件匹配功能。一种简单的正则表达式由英文字母(区分大小写)、数字及通配符 *? 组成,? 代表任意一个字符,* 则可以代表零个或任意多个字符。

例如:

  1. a*b 可以匹配 acb (* 代表 c)、aabb (* 代表 ab)、asdsfdfdb (* 代表 sdsfdfd)、ab (* 不代表任何字符)。
  2. a*b 不可以匹配 ac(缺少最右边的字母 b)、bb(缺少最左边的字母 a)、 abbc(最右边的字母不是 b)。
  3. a?b 可以匹配 acb? 代表 c)。
  4. a?b 不可以匹配 ab(缺少中间的一个字符)、accb? 只能代表一个字符)。

现要对某目录下的部分文件进行操作。写一个程序,寻找一个正则表达式,使其能匹配的待操作文件最多,但不能匹配任何不进行操作的文件。注意你所找到的最优正则表达式的长度应当是最短的。

如果有多个长度最短的最优正则表达式,则其中任意一个都是允许的。

输入格式

nn 行组成,第一行一个整数 nn 表示字符串数量。

每行给出了一个字符串表示文件名(由英文字母和数字组成:英文字符区分大小写),其后是一个空格和一个字符(+-)。

+ 表示要对该行给出的文件进行操作,- 表示不进行操作。

输出格式

由两行组成。

第一行是一个整数,给出了你的程序所找到的最优正则表达式所能匹配的文件数目。

在第二行给出你的程序所找到的最优正则表达式。

5
EXCHANGE +
EXT +
HARDWARE +
MOUSE -
NETWORK -
2
E*
5
EXCHANGE +
EXTRAS +
HARDWARE +
MOUSE -
NETWORK -

3
*A*

提示

对于 100%100\% 的数据:1n250Si81\le n\le 250,|S_i|\le8

为了便于调试和验证 Special Judge 的正确性,公布错误信息和对应的意思:

错误信息:

  1. The number of matching file name(s) is wrong! 你输出的数量不是最多的。
  2. The expression is longer than jury's expression! 你输出的表达式不是最短的。
  3. The expression matches an invalid file name! 你输出的表达式匹配了不进行操作的文件。
  4. The answer is correct. 你输出的表达式符合题目要求。
  5. The expression is shorter than jury's expression ??? 你输出的表达式符合题目要求,且比现有最优表达式短。
  6. The expression is better than jury's expression ??? 你输出的表达式符合题目要求,且匹配的文件数目比现有最优表达式多。
  7. The number of matching file name(s) is false! 你输出的表达式匹配的数量比你输出的数量少。

如果你遇到了 5、6 的评测错误情况,请找搬题人或者管理员,我们将修正数据。

感谢Special Judge来源:Sprague_Garundy

感谢 hack 数据提供:oOoOoOOOooOO,位于单独的Subtask,为0分,但是不通过视为不通过此题。