ZOJ 1633 Big String(模拟构造)

来源:互联网 发布:杭州淘宝运营助理招聘 编辑:程序博客网 时间:2024/06/05 11:53
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

1248


Sample Output

T.^T
题意:开始时有两个字符串,A = "^__^" (four characters),  B = "T.T" (three characters),然后重复执行C=BA,A=B,B = C,问第n个字符是什么。
分析:因为最终的字符串是从前往后递推出来的,所以再求解时,我们可以把这个过程逆过去,直到字符串的长度不超过7,输出即可。
#include<iostream>#include<string>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;}


0 0
原创粉丝点击