SP1876 DRAGONCU - Dragon Curves
题目描述
定义$r(s)$为二进制字符串$s$翻转之后的补码,即先把二进制串$s$翻转,然后把所有的$0$变为$1$,把所有的$1$变成$0$。
然后,我们如下定义一个二进制串的数列:$s_0=1$,$s_n=s_{n-1}1r(s_{n-1})$,即:
$s_0=1$
$s1=110$
$s2=1101100$
$s3=110110011100100$
这之后,我们为一个机器人编程,使它每秒移动$1$个单位,并且根据$s_{10}$的二进制码来确定是接下来左转弯还是右转弯,转弯均为直角弯。在第$k$轮,若$s_{10}$的第$k$位数码是$1$,则机器人将向左转弯,若为$0$则将向右转弯。原文里的图表明了机器人的整个移动轨迹。
一开始的时候,机器人处于原点$(0,0)$处,并且面朝东方(即图中的白色圆圈)。在$2048$秒之后,它会处在点$(-32,32)$(即图中的黑色点)。机器人的运动轨迹被称为**龙曲线**(dragon curve),这是一种非常著名的分形模型。
现在,机器人的程序被输入了$s_{30}$,其它的所有条件均不变,它将会一直运行直到$2^{31}$秒后停下。给出一个时间,我们现在想要知道机器人运行到的坐标。
输入格式
输入包含多组数据。每一组数据占一行,包含一个数$n(n\leq10^9)$。输入数据以一个数$-1$结束。保证输入不超过$5000$组。
输出格式
输出有多组。对于每一个给定的$n$,输出在$s_{30}$的调控之下,机器人开始执行程序$n$秒后,它所在的位置。输出数据应占一行,以坐标形式$(x,y)$给出。
# 样例输入
1
2
3
2048
1000000000
-1
# 样例输出
(1,0)
(1,1)
(0,1)
(-32,32)
(9648,-31504)