您的位置:首页 > 编程语言 > Go语言

Round A APAC Test 2016 Problem A. Googol String

2015-09-18 11:35 441 查看
Round A APAC Test 2016 Problem A. Googol String

Problem

A "0/1 string" is a string in which every character is either 0 or 1.
There are two operations that can be performed on a 0/1 string:
switch: Every 0 becomes 1 and every 1 becomes 0.
For example, "100" becomes "011".
reverse: The string is reversed. For example, "100" becomes "001".

Consider this infinite sequence of 0/1 strings:

S0 = ""

S1 = "0"

S2 = "001"

S3 = "0010011"

S4 = "001001100011011"

SN = SN-1 + "0" + switch(reverse(SN-1)).

You need to figure out the Kth character of Sgoogol, where googol = 10100.

完整题目可以去别的地方找,我的解法如下:

<pre name="code" class="cpp">cin >> k;
if (!(k& k - 1))
k = 0;
else
{
while (k > 0 && ((k & 0x01) == 0))
k >>= 1;
k >>= 1;
k &= 0x01;
}
cout << k;



设位置k的字符是B[k],k从1开始

B[k]以下性质

1. 处在2次幂位置的数必定为0

2. 如果k是偶数,B[k]=B[k/2]

3. 如果k是奇数,k=2i+1,B[k]=i%2

下面简单证明下这三个性质
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: