ZOJ-Big string(服氣思維)
阿新 • • 發佈:2017-11-12
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(服氣思維)