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<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;
}

ZOJ 1633 Big String,布布扣,bubuko.com

时间: 2024-12-29 11:55:48

ZOJ 1633 Big String的相关文章

zoj 1905 Power String(后缀数组)

 题意:给定一个字符串L,已知这个字符串是由某个字符串S 重复R 次而得到的,求R 的最大值. 做法比较简单,穷举字符串S 的长度k,然后判断是否满足.判断的时候, 先看字符串L 的长度能否被k 整除,再看suffix(0)和suffix(k)的最长公共 前缀是否等于n-k.在询问最长公共前缀的时候,suffix(0)是固定的,所以RMQ 问题没有必要做所有的预处理, 只需求出height 数组中的每一个数到 height[rank[0]]之间的最小值即可.整个做法的时间复杂度为O(nlog

(map) zoj 1633

A - Alice's present Time Limit:5000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Submit Status Practice ZOJ 3633 Appoint description:  System Crawler  (2015-01-27) Description As a doll master, Alice owns a wide range of dolls, and each

ZOJ 3543 Number String 【2011大连区域赛】【dp】

题意 给出一串由D,I,?构成的长为n的字符串,这个字符串表示满足某种规则的1到n+1的排列集合,D表示该位置数字比前面一个小,I表示该位置的数字比前面一个大,?表示不确定可D可I 比如 满足DI的数字排列有3,1,2和2,1,3 1<=n<=1000,求有多少种满足此条件的字符串 设计的dp如下 dp[i][j] 代表满足上述字符串前i-1项的长为i尾巴为j的1到i的排列数目 当第i-1项为D时 dp[i][j]=sigma(dp[i-1][k]),i-1=>k>=j 当第i-1

ZOJ 1633

迭代 每个数对应前面的一个数 #include<stdio.h> #include<iostream> using namespace std; #define max 88 long long s[max], n,p; char *first="T.T^__^"; void Init() { s[0]=7; s[1]=10; int i; for(i=2; i <= max; i++) s[i]=s[i-1]+s[i-2]; } int getp() {

[AC自己主动机] zoj Searching the String

意甲冠军: 到原始字符串.给n字符串,每个字符串都有一个属性,属性0代表重叠,1代表不能重叠 请各多少次出现的字符串 思维: 为了便于建立两台机器自己主动(0一个.1一个) 然后,它可以重叠非常好做,谁做 不可重叠的话须要记录两个东西 len[i]代表每一个串的长度,used[i]代表每一个串在之前出现的位置,初始化-1 然后遍历到的时候对于当前位置 j. 必须j>=used[i]+len[i] 才干算出现.而且更新 须要注意的是: 会出现相同属性而且相同的串. 我处理的方式就是排序.按id排序

[AC自动机] zoj Searching the String

题意: 给一个原串,再给n个串,每个串有属性,属性0代表可以重叠,1代表不可以重叠 问每个串出现了多少次 思路: 为了方便建立两个自动机(0的一个,1的一个) 然后可以重叠的很好做,以前都做过 不可重叠的话需要记录两个东西 len[i]代表每个串的长度,used[i]代表每个串在之前出现的位置,初始化-1 然后遍历到的时候对于当前位置 j, 必须j>=used[i]+len[i] 才能算出现,并且更新 需要注意的是: 会出现同样属性并且相同的串.我处理的方式就是排序,按id排序大的在前 然后算一

Pattern类(java JDK源码记录)

1 /* 2 * Copyright (c) 1999, 2018, Oracle and/or its affiliates. All rights reserved. 3 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. 4 * 5 * 6 * 7 * 8 * 9 * 10 * 11 * 12 * 13 * 14 * 15 * 16 * 17 * 18 * 19 * 20 * 21 * 22 * 23 *

zoj 3228 Searching the String(AC自动机)

题目连接:zoj 3228 Searching the String 题目大意:给定一个字符串,然后现在有N次询问,每次有一个type和一个子串,问说子串在字符串中出现几次,type 为0时为可重叠,为1时为不可重叠. 解题思路:不过没有type=1的限制,那么就是普通的AC自动机匹配问题,对于不可重叠问题,可以对于每个节点记录 一下上一次匹配到的pos,用当前匹配的i减掉pos看有没有超过长度,有超过即为合法匹配,否则忽略. 题目中有很多相同的子串,一开始我用jump数组用类似链表的形式记录每

ZOJ 1151 Word Reversal反转单词 (string字符串处理)

链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=151 For each list of words, output a line with each word reversed without changing the order of the words. This problem contains multiple test cases! The first line of a multiple input is