loj#P6082. 点亮的水晶

点亮的水晶

题目描述

Flandre 的背后的水晶,会按照她的心情点亮。我们可以把水晶点亮与否读成一个二进制数,像是 101001001000111100010000001 这样的。

  • Sakuya:这个数是 7 的倍数啊
  • F:你是怎么知道的
  • S:我用正则表达式啊
  • F:那你现在多了一个问题了

你现在多了一个问题了!给定一个数 kk,请回答一个正则表达式 RR,使得对于任意 SSRR 匹配字符串 SS 当且仅当 SS 是一个 kk 的倍数的二进制数。

关于正则表达式:你的正则表达式只能使用以下字符:

01()|+*?

我们使用全串匹配测试,所以你不需要使用 ^$

关于 SS:我们对你的正则表达式测试的 SS 符合以下条件:

  • SS 仅由 01 组成,且非空
  • SS 不会有前导 0,也不会就是 0

举例来说,当 k=7k = 7 时,我们要求你给出的 RR 匹配以下字符串:

  • 111(十进制下为 77
  • 10100100100011110001000000186276225=12325175×786276225 = 12325175 \times 7

我们要求你给出的 RR 不匹配以下字符串:

  • 110(十进制下为 66
  • 1000111011000111101010110000149715632=21387947×7+3149715632 = 21387947 \times 7 + 3

我们对你给出的 RR 是否匹配以下字符串不关心

  • test
  • 000001111(前导 0)
  • 0(是的,SS 不会是 0
  • 空字符串

输入格式

仅有一行,包含 kk

输出格式

仅有一行,包含你的正则表达式 RR

2
(0|1)*0

数据范围与提示

有 10 个测试点,第 ii 个测试点有 k=ik = i

程序输出不得超过 5000050000 个字符


来源:是 https://www.codewars.com/kata/regular-expression-check-if-divisible-by-0b111-7/ 的加强版