设为首页 加入收藏

TOP

ZOJ 1633 Big String
2015-07-20 18:00:34 来源: 作者: 【 】 浏览:2
Tags:ZOJ 1633 Big String
Big String

Time Limit: 2 Seconds Memory Limit: 65536 KB

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
     
      
    题意:开始时有两个字符串,A = "^__^" (four characters),  B = "T.T" (three characters),然后重复执行C=BA,A=B,B = C,问第n个字符是什么。
     
      
    分析:因为最终的字符串是从前往后递推出来的,所以再求解时,我们可以把这个过程逆过去,直到字符串的长度不超过7,输出即可。
     
      
    #include
        
         
    #include
         
           using namespace std; typedef long long LL; LL a[95]; //保存字符串的长度 int main() { string C = "T.T^__^"; a[0] = 4; a[1] = 3; int i; for(i = 2; i < 90; i++) a[i] = a[i-1] + a[i-2]; LL n; while(cin >> n) { while(n > 7) { int pos = lower_bound(a, a+89, n) - a; n -= a[pos-1]; } cout << C[n-1] << endl; } return 0; }
         
        


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇POJ 2263 Heavy Cargo(二分+并查.. 下一篇poj 1679 The Unique MST (次小生..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: