核心观察
定义 Y=X⊕⌊X/2⌋。
设 X 的二进制表示中第 i 位为 bi(最低位为第 0 位),则 Y 的第 i 位为 bi⊕bi+1。
因此 Y 中为 1 的位恰好对应 X 中相邻位 不同 的位置(即 0 与 1 的交界处)。
段合并与边界提取
输入序列 c 从高位到低位描述了 X 的二进制位流,其中 ci 表示连续 ci 个相同的位(奇数为 1,偶数为 0)。
现有一个非负整数 X,但我们不会直接给出它,而是用一种紧凑的方式描述它的二进制表示。
给定一个长度为 K 的整数序列 c1,c2,…,cK,它按照从高位到低位的顺序刻画了 X 的二进制形式:第 i 个元素 ci 表示在当前位之后,连续出现 ci 个相同的二进制位,这些位的值等于 ci 除以 2 的余数。换句话说,若 ci 是奇数则这连续的 ci 位都是 1,若 ci 是偶数则都是 0。
例如,序列 [3,4,1,2] 对应的二进制串为 1110000100。
现定义函数 F(X)=(X⊕⌊X/2⌋)modM,其中 ⊕ 表示按位异或运算,⌊X/2⌋ 表示将 X 右移一位(向下取整),M 是一个给定的正整数。请你根据序列 c 求出 F(X) 的值。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.