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
下面簡單證明下這三個性質