Round A APAC Test 2016 Problem A. Googol String

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


下面簡單證明下這三個性質

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章