1. 程式人生 > >ZOJ-Big string(服氣思維)

ZOJ-Big string(服氣思維)

follow pac ont 大於 mes and style cin his

個人心得:我在分治上看到的,但是感覺跟分治沒關系,一眼想到斐波那契數可以找到此時n的字符串,但是無法精確到字母,題解的思路

真是令人佩服,以BA為基準,然後只要此時的長度大於7那麽必然可以減去最大的斐波那契數然後轉換為基準,此時直接輸出就好了。服氣服氣

題目:

We will construct an infinitely long string from two short strings: A = "^__^" (four characters), and B = "T.T" (three characters). Repeat the following steps:

  • Concatenate A after B to obtain a new string C. For example, if A = "^__^" and B = "T.T", then C = BA = "T.T^__^".
  • Let A = B, B = C -- as the example above A = "T.T", B = "T.T^__^".

Your task is to find out the n-th character of this infinite string.


Input

The input contains multiple test cases, each contains only one integer N (1 <= N <= 2^63 - 1). Proceed to the end of file.


Output

For each test case, print one character on each line, which is the N-th (index begins with 1) character of this infinite string.


Sample Input

1
2
4
8


Sample Output

T
.
^
T
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<cstring>
 5 #include<iomanip>
 6 #include<algorithm>
 7 using namespace std;
 8 #define maxi 0x7FFFFFFFFFFFFFFFLL
 9 long long x[100];
10 string base
="T.T^__^"; 11 void init(){ 12 x[2]=10; 13 x[1]=7; 14 for(int i=3;i<100;i++) 15 { 16 x[i]=x[i-1]+x[i-2]; 17 } 18 } 19 int main() 20 { 21 long long n; 22 init(); 23 while(cin>>n){ 24 while(n>7){ 25 int i=0; 26 while(i<100&&x[i]<n) 27 i++; 28 n-=x[i-1]; 29 } 30 cout<<base[n-1]<<endl; 31 } 32 return 0; 33 }



ZOJ-Big string(服氣思維)