时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 524288K,其他语言1048576K
64bit IO Format: %lld

题目描述

Dr. JYY has just created the Coffee Chicken strings, denoted as S(n). They are quite similar to the Fibonacci soup --- today's soup is made by mingling yesterday's soup and the day before yesterday's soup:
- S(1) = \texttt{"COFFEE"}S(1)="COFFEE";
- S(2) = \texttt{"CHICKEN"}S(2)="CHICKEN";
- S(n) = S(n-2) :: S(n-1), where :: denotes string concatenation.
The length of S(n) quickly gets out of control as n increases, and there would be no enough memory in JYY's game console to store the entire string. He wants you to find 10 contiguous characters in S(n), starting from the kth character.

 

输入描述:

The first line of input is a single integer T (1 \leq T \leq 1000)(1≤T≤1000), denoting the number of test cases. Each of the following T lines is a test case, which contains two integers n, k (1 \leq n \leq 500, 1 \leq k \leq \min\{|S(n)|, 10^{12}\})(1≤n≤500,1≤k≤min{∣S(n)∣,1012}). |S| denotes the length of string S.

输出描述:

For each test case, print the answer in one line. If there are no enough characters from the kth character, output all characters until the end of the string.
示例1

输入

复制

2
3 4
2 7

输出

复制

FEECHICKEN
N

题意:

s[1]="COFFEE",s[2]="CHICKEN",s[n]由s[n-2]和s[n-1]连接而成,注意s[n-2]在s[n-1]的前面
问长度为s[n]的字符串,从第k个字符开始的连续10个字符是多少(如果还未有10个字符但到达字符串末尾时要停止)

思路:

s[n]=s[n-2]+s[n-1],类似斐波那契数列,现在要看k是在s[n-2]上还是s[n-1]上,所以想到用k在s[n-2]和s[n-1]上搜索,如果k小于等于s[n-2]就向s[n-2]搜索,否则
就向s[n-1]搜索,但注意s[n-1]只是长度而不是位置,而k是原s[n]中的总位置,所以向子串搜索时
要减去多余的位置才能在子串的长度中搜索所以k-s[n-2]才能得到在s[n-1]中的长度,也就是它的相对位置

注意:

有一个坑点,inf要设为1e12+10,因为k最大是1e12,又要输出10位,所以极限要比1e12大10

 #include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const ll inf=1e12+; ///这是一个坑点,inf要设为1e12+10,因为k最大是1e12,又要输出10位,所以极限要比1e12大10
const int amn=5e2+;
ll s[amn];
char ans1[]="COFFEE",ans2[]="CHICKEN";
char find(ll n,ll k){
if(n==)return ans1[k-]; ///这里k-1是因为ans数组从0开始,而k从1开始
if(n==)return ans2[k-];
if(k>s[n-])return find(n-,k-s[n-]); ///如果k要往右边搜索,则k要减去前面的s[n-2]才能得到s[n-1]的相对位置,注意这里要加返回才能从最底层一直返回到最顶层,不然就只是在最底层返回到上一层
else return find(n-,k); ///如果向左边搜索就直接下传
}
int main(){
int T;
ll n,k;
s[]=,s[]=;
for(int i=;i<=;i++)s[i]=s[i-]+s[i-]<=inf?s[i-]+s[i-]:inf; ///预处理s数组,是每种字符串的长度
scanf("%d",&T);
while(T--){
scanf("%lld%lld",&n,&k);
for(ll i=k;i<k+&&i<=s[n];i++)printf("%c",find(n,i));printf("\n"); ///一个个输出,到10个或超过了字符串总长度就停止
}
}
/**
s[1]="COFFEE",s[2]="CHICKEN",s[n]由s[n-2]和s[n-1]连接而成,注意s[n-2]在s[n-1]的前面
问长度为s[n]的字符串,从第k个字符开始的连续10个字符是多少(如果还未有10个字符但到达字符串末尾时要停止)
s[n]=s[n-2]+s[n-1],类似斐波那契数列,现在要看k是在s[n-2]上还是s[n-1]上,所以想到用k在s[n-2]和s[n-1]上搜索,如果k小于等于s[n-2]就向s[n-2]搜索,否则
就向s[n-1]搜索,但注意s[n-1]只是长度而不是位置,而k是原s[n]中的总位置,所以向子串搜索时
要减去多余的位置才能在子串的长度中搜索所以k-s[n-2]才能得到在s[n-1]中的长度,也就是它的相对位置
注意有一个坑点,inf要设为1e12+10,因为k最大是1e12,又要输出10位,所以极限要比1e12大10
**/

[dfs] 2019牛客暑期多校训练营(第十场) Coffee Chicken的更多相关文章

  1. 2019牛客暑期多校训练营(第二场)F.Partition problem

    链接:https://ac.nowcoder.com/acm/contest/882/F来源:牛客网 Given 2N people, you need to assign each of them ...

  2. 2019牛客暑期多校训练营(第九场)A:Power of Fibonacci(斐波拉契幂次和)

    题意:求Σfi^m%p. zoj上p是1e9+7,牛客是1e9:  对于这两个,分别有不同的做法. 前者利用公式,公式里面有sqrt(5),我们只需要二次剩余求即可.     后者mod=1e9,5才 ...

  3. 2019牛客暑期多校训练营(第一场)A题【单调栈】(补题)

    链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 题目描述 Two arrays u and v each with m distinct elem ...

  4. 2019牛客暑期多校训练营(第一场) B Integration (数学)

    链接:https://ac.nowcoder.com/acm/contest/881/B 来源:牛客网 Integration 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 5242 ...

  5. 2019牛客暑期多校训练营(第一场) A Equivalent Prefixes ( st 表 + 二分+分治)

    链接:https://ac.nowcoder.com/acm/contest/881/A 来源:牛客网 Equivalent Prefixes 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/ ...

  6. 2019牛客暑期多校训练营(第一场)A Equivalent Prefixes(单调栈/二分+分治)

    链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 Two arrays u and v each with m distinct elements ...

  7. [状态压缩,折半搜索] 2019牛客暑期多校训练营(第九场)Knapsack Cryptosystem

    链接:https://ac.nowcoder.com/acm/contest/889/D来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言52428 ...

  8. 2019牛客暑期多校训练营(第二场)J-Subarray(思维)

    >传送门< 前言 这题我前前后后看了三遍,每次都是把网上相关的博客和通过代码认真看了再思考,然并卵,最后终于第三遍也就是现在终于看懂了,其实懂了之后发现其实没有那么难,但是的的确确需要思维 ...

  9. 2019牛客暑期多校训练营(第二场)H Second Large Rectangle

    示例一: 输入  : 1 2 01 输出: 0 示例二: 输入  : 1 3 101 输出: 1 示例三(自己自测找错误用的): 输入  : 6 610011111101111111111111111 ...

随机推荐

  1. VirtualBox Ubuntu设置静态ip亲测可行

    virtualbox重启后ip会自动分配,不固定.项目中需要配置ip地址,因此每次ip换了,需要重新配置和编译. 网上搜罗好几种方法进行配置,尝试下面这种简单并且可行: 步骤一:查看虚拟机网卡 ifc ...

  2. 全网最详细的一篇Flutter 尺寸限制类容器总结

    Flutter中尺寸限制类容器组件包括ConstrainedBox.UnconstrainedBox.SizedBox.AspectRatio.FractionallySizedBox.Limited ...

  3. 说一说 HTML 中的 script 标签

    我们在 <Javascript简史>这遍文章中说过,「Javascript」这门语言是由 Netscape开发而来,当初开发的时候为了能让 「Javascript」这门语言能与 HTML ...

  4. 痞子衡嵌入式:恩智浦i.MX RTxxx系列MCU启动那些事(6.1)- FlexSPI NOR连接方式大全(RT600)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RT600的FlexSPI NOR启动的连接方式. 痞子衡前段时间一鼓作气写完了三篇关于i.MXRT1xxx系列Flex ...

  5. 2019年高校微信小程序开发大赛学习笔记

    学做小程序(学堂在线笔记)一.传统布局 text-align:center //水平居中 margin-bottom: 60px //设置间距 二.弹性盒子布局 display:flex; flex- ...

  6. 【S2-053】Struts2远程命令执行漏洞(CVE-2017-12611)

    继S2-052之后,Apache Struts 2再次被曝存在远程代码执行漏洞,漏洞编号S2-053,CVE编号CVE-2017-1000112. 当开发人员在Freemarker标签中使用错误的构造 ...

  7. SQLi-Labs之1~6关 - 常规注入与盲注

    年初五 财神入 第一关 联合注入 1.准备 2.加'截断 3.order by 判断查询列数 4.同上 5.联合查询判断字段位置 6.查数据库名 7.1 查表名 7.2 查列名 8.查数据 第二关 不 ...

  8. flask blueprint出现的坑

    from flask import Blueprint admin = Blueprint('admin',__name__) def init_bule(app): app.register_blu ...

  9. 数据挖掘算法——K-means算法

    k-means中文称为K均值聚类算法,在1967年就被提出  所谓聚类就是将物理或者抽象对象的集合分组成为由类似的对象组成的多个簇的过程 聚类生成的组成为簇 簇内部任意两个对象之间具有较高的相似度,不 ...

  10. java-FileUtils(复制文件夹、复制文件、字符串直接写入文件中)(新手)

    实例: lx1: import org.apache.commons.io.FileUtils; import java.io.File; import java.io.IOException; pu ...