[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 ...
随机推荐
- windowserver 2012安装openssh
下载https://github.com/PowerShell/Win32-OpenSSH/releases解压放到C:\Program Files\OpenSSH-Win64 进入到C:\Progr ...
- 通过ELK快速搭建集中化日志平台
ELK就是ElasticSearch + LogStash + Kibana 1.准备工作 ELK下载:https://www.elastic.co/downloads/ jdk version:1. ...
- Tian Tian 菾菾 导游 陪同
自画像系列是梵高的代表作之一,他是一位自学成才的画家,下笔完全自由,主观提取了当时印象派画家学到的技巧,在这幅画中,我们可以看到,颜色在画中的堆叠,色彩与笔在画中表现的形态,都表现出,梵高在他作画中内 ...
- Canvas和svg总结比较
Canvas 基本用法 getContext() 描边和填充 strokeStyle:设置描边样式fillStyle:设置填充样式stroke():描边fill():填充 绘制矩形 fillRect( ...
- yum配置与使用
yum的配置一般有两种方式,一种是直接配置/etc目录下的yum.conf文件,另外一种是在/etc/yum.repos.d目录下增加.repo文件. 一.yum的配置文件 [main] cached ...
- 震惊,当我运行了这条Linux命令后,服务器竟然... (Linux中的删除命令)
震惊,当我运行了这条Linux命令后,服务器竟然... 0X00 写在前面 大家都听说过删库命令rm -rf /*,但是谁又真正实践过呢?但作为一个程序员,不看看这条命令执行后会发生什么,怎么能甘心呢 ...
- XSS_跨站脚本攻击
前段时间在网上看到一个网址,好奇之下进去看了看.胜利的条件是你录入一个串,让其调用prompt(1) .发现里面有好多想不到的东西,今天终于悠闲了来这里说说XSS. XSS 原理 恶意攻击者往Web页 ...
- Python-Requests库的安装和调用
#使用pip或者pip3安装requests库pip3 install requests #requests库:python #输入python进入命令行模式在cmd命令行中依次运行以下代码,或者直接 ...
- disruptor 入门 一
一.disruptor基本概念 https://www.cnblogs.com/haiq/p/4112689.html 二.disruptor入门程序 导入disruptor包 <depende ...
- Java继承中构造器的调用原理
Java的继承是比较重要的特性,也是比较容易出错的地方,下面这个例子将展示如果父类构造器中调用被子类重写的方法时会出现的情况: 首先是父类: public class test { void fun( ...