[dfs] 2019牛客暑期多校训练营(第十场) Coffee Chicken
空间限制:C/C++ 524288K,其他语言1048576K
64bit IO Format: %lld
题目描述
- 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.
输出
复制
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的更多相关文章
- 2019牛客暑期多校训练营(第二场)F.Partition problem
链接:https://ac.nowcoder.com/acm/contest/882/F来源:牛客网 Given 2N people, you need to assign each of them ...
- 2019牛客暑期多校训练营(第九场)A:Power of Fibonacci(斐波拉契幂次和)
题意:求Σfi^m%p. zoj上p是1e9+7,牛客是1e9: 对于这两个,分别有不同的做法. 前者利用公式,公式里面有sqrt(5),我们只需要二次剩余求即可. 后者mod=1e9,5才 ...
- 2019牛客暑期多校训练营(第一场)A题【单调栈】(补题)
链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 题目描述 Two arrays u and v each with m distinct elem ...
- 2019牛客暑期多校训练营(第一场) B Integration (数学)
链接:https://ac.nowcoder.com/acm/contest/881/B 来源:牛客网 Integration 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 5242 ...
- 2019牛客暑期多校训练营(第一场) A Equivalent Prefixes ( st 表 + 二分+分治)
链接:https://ac.nowcoder.com/acm/contest/881/A 来源:牛客网 Equivalent Prefixes 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/ ...
- 2019牛客暑期多校训练营(第一场)A Equivalent Prefixes(单调栈/二分+分治)
链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 Two arrays u and v each with m distinct elements ...
- [状态压缩,折半搜索] 2019牛客暑期多校训练营(第九场)Knapsack Cryptosystem
链接:https://ac.nowcoder.com/acm/contest/889/D来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言52428 ...
- 2019牛客暑期多校训练营(第二场)J-Subarray(思维)
>传送门< 前言 这题我前前后后看了三遍,每次都是把网上相关的博客和通过代码认真看了再思考,然并卵,最后终于第三遍也就是现在终于看懂了,其实懂了之后发现其实没有那么难,但是的的确确需要思维 ...
- 2019牛客暑期多校训练营(第二场)H Second Large Rectangle
示例一: 输入 : 1 2 01 输出: 0 示例二: 输入 : 1 3 101 输出: 1 示例三(自己自测找错误用的): 输入 : 6 610011111101111111111111111 ...
随机推荐
- AIDLservice
有三种情况:如果直接使用服务,则没有必要进行绑定,但是如果要使用服务里面的方法,则要进行绑定.具体的启动情况有下: 其中很重要一点:bindService和unbindService是成对出现的. 1 ...
- python 字典元组集合字符串
s1 = ''hello, world!'' s2 = '\n\hello, world!\\n' print(s1, s2, end='') s1 = '\141\142\143\x61\x62\x ...
- JMeter-完成批量的接口测试
前言 当我们在工作中进行接口测试时,项目的接口肯定不止一个,而是很多很多,而且每个接口都需要进行正确参数,错误参数,参数为空,特殊字符等方式来测试接口是否能够正确返回所需的响应值. 今天,我们来一起学 ...
- Ⅱ:python入门
一.编程语言介绍 编程语言的分类: 机器语言 汇编语言 高级语言(编译型.解释型号) 总结: 执行效率:机器语言>汇编语言>高级语言(编译型>解释型) 开发效率:机器语言<汇编 ...
- Grafana使用总结
最近工作需求学习了下grafana,根据创建的几个dashboard简要记录下创建过程. 本次使用了grafana做可视化展示,data source使用的rds是postgresql和时序数据库in ...
- Java面试必问之Hashmap底层实现原理(JDK1.7)
1. 前言 Hashmap可以说是Java面试必问的,一般的面试题会问: Hashmap有哪些特性? Hashmap底层实现原理(get\put\resize) Hashmap怎么解决hash冲突? ...
- Linux永久开放端口
/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT /sbin/iptables -I INPUT -p tcp --dport 3306 -j A ...
- 前端Bug解决方案
没错!我正在写bug呢!不管你是小白还是大牛,写bug无可避免,遇到bug怎么办?别慌!毛主席教导我们"战略上藐视BUG,战术上重视BUG"!前端遇到的bug无非就三个方面结构层( ...
- 从零开始打造 Mock 平台 - 核心篇
前言 最近一直在捣鼓毕设,准备做的是一个基于前后端开发的Mock平台,前期花了很多时间完成了功能模块的交互.现在进度推到如何设计核心功能,也就是Mock数据的解析. 根据之前的需求设定加上一些思考,用 ...
- 前端性能优化之Lazyload
前端性能优化之Lazyload @(Mob前端-冬晨)[JavaScript|技术分享|懒加载] [TOC] Lazyload 简介 前端工作中,界面和效果正在变得越来越狂拽炫酷,与此同时性能也是不得 ...