问题来源
问题的数学描述
以0-9
以及A-F
为表示字符,输入一个字符串 S S S,代表一个十六进制数,其对应的二进制数的位串为 S B S_B SB,长度为 n n n(去除前导零)。
定义操作 L ( i ) L(i) L(i):将 S B S_B SB的第 i i i位1、第 ( i − 1 ) (i-1) (i−1)位、第 ( i + 1 ) (i+1) (i+1)位取反,若其中某位不存在则忽略(即 i − 1 < 0 ∨ i + 1 > n − 1 i-1<0\lor i+1>n-1 i−1<0∨i+1>n−1)。
设计程序,求解最少进行多少次操作 L ( i ) L(i) L(i),能够使得 S B S_B SB转换为全0串。
问题分析
将输入的字符串 S S S转换为 S B S_B SB并不困难,因为每个十六进制位(digit)唯一对应一组4-bit二进制串。主要的问题在于操作 L L L。
这个问题的目标是要进行操作,使得 ∀ i ∈ [ 0 , n ) ( i ∈ Z ) , S B [ i ] = 0 \forall i\in [0,n)(i\in \mathbb{Z}), S_B[i]=0 ∀i∈[0,n)(i∈Z),SB[