码迷,mamicode.com
首页 > 其他好文 > 详细

ZOJ-Big string(服气思维)

时间:2017-11-12 21:51:24      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:contain   zoj   index   log   rac   int   sam   har   proc   

个人心得:我在分治上看到的,但是感觉跟分治没关系,一眼想到斐波那契数可以找到此时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(服气思维)

标签:contain   zoj   index   log   rac   int   sam   har   proc   

原文地址:http://www.cnblogs.com/blvt/p/7822912.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!