Codeforces #449 div2 C题
C. Nephren gives a riddletime limit per test2 seconds
memory limit per test256 megabytes
inputstandard input
outputstandard output
What are you doing at the end of the world? Are you busy? Will you save us?
Nephren is playing a game with little leprechauns.
She gives them an infinite array of strings, f0... ∞.
f0 is "What are you doing at the end of the world? Are you busy? Will you save us?".
She wants to let more people know about it, so she defines fi = "What are you doing while sending "fi - 1"? Are you busy? Will you send "fi - 1"?" for all i ≥ 1.
For example, f1 is
"What are you doing while sending "What are you doing at the end of the world? Are you busy? Will you save us?"? Are you busy? Will you send "What are you doing at the end of the world? Are you busy? Will you save us?"?". Note that the quotes in the very beginning and in the very end are for clarity and are not a part of f1.
It can be seen that the characters in fi are letters, question marks, (possibly) quotation marks and spaces.
Nephren will ask the little leprechauns q times. Each time she will let them find the k-th character of fn. The characters are indexed starting from 1. If fn consists of less than k characters, output '.' (without quotes).
Can you answer her queries?
InputThe first line contains one integer q (1 ≤ q ≤ 10) — the number of Nephren's questions.
Each of the next q lines describes Nephren's question and contains two integers n and k (0 ≤ n ≤ 105, 1 ≤ k ≤ 1018).
OutputOne line containing q characters. The i-th character in it should be the answer for the i-th query.
ExamplesInput3
1 1
1 2
1 111111111111OutputWh.Input5
0 69
1 194
1 139
0 47
1 66OutputabdefInput10
4 1825
3 75
3 530
4 1829
4 1651
3 187
4 584
4 255
4 774
2 474OutputAreyoubusy
题目大意:fi表示第i个字符串,输入q次询问,再输入n,k;输出fn的第k个字符。如果k大于fn的长度,那么就输出'.'。
解题思路:思维题,字符串很长,不能直接dfs,只能从长度入手,判断字符在fi字符串。
因为长度倍增,所以f53的时候差不多就超过了输入的最大值,n大于53的时候在dfs特判下就行。
AC代码:
1 #include<iostream>
2 #include<bits/stdc++.h>
3 #include<stdio.h>
4 #define ll long long
5 #define MAX 1e18
6 using namespace std;
7 ll a[100500];
8 string s0,s1,s2,s3;
9 ll len1,len2,len3,len0;
10 ll most;
11 char dfs(ll n,ll k){
12 if(n==0){
13 return s0[k-1];
14 }
15 if(k<=len1){
16 return s1[k-1];
17 }
18 if(k<=len1+a[n-1]||n>most){ //特判一下
19 return dfs(n-1,k-len1);
20 }
21 if(k<=len1+a[n-1]+len2){
22 return s2[k-(len1+a[n-1])-1];
23 }
24 if(k<=len1+a[n-1]+len2+a[n-1]){
25 return dfs(n-1,k-(len1+a[n-1]+len2));
26 }
27 return s3[k-(len1+a[n-1]+len2+a[n-1])-1];
28 }
29 int main(){
30 s0="What are you doing at the end of the world? Are you busy? Will you save us?";
31 s1="What are you doing while sending \"";
32 s2="\"? Are you busy? Will you send \"";
33 s3="\"?";
34 len0=s0.length();
35 len1=s1.length();
36 len2=s2.length();
37 len3=s3.length();
38 a[0]=len0;
39 for(int i=1;i<60;i++){
40 ll s=len1+a[i-1]+len2+a[i-1]+len3;
41 if(s>MAX){
42 most=i; //most==i,如果是i-1就会RE
43 break;
44 }
45 else a[i]=s;
46 }
47 int q;
48 cin>>q;
49 while(q--){
50 ll n,k;
51 cin>>n>>k;
52 if(n<=most&&k>a[n]){
53 cout<<'.';
54 }else{
55 cout<<dfs(n,k);
56 }
57 }
58 cout<<endl;
59 return 0;
60 }
Codeforces #449 div2 C题的更多相关文章
- Codeforces #449 Div2 D
#449 Div2 D 题意 交互式类题目. 起始有 n 张纸,会给出 m 次数字 p (\(1 \leq p \leq c\)),每次可选择一张纸,并在纸上写上这个数字,如果纸上已经存在数字,会覆盖 ...
- codeforces #262 DIV2 B题 Little Dima and Equation
题目地址:http://codeforces.com/contest/460/problem/B 这题乍一看没思路.可是细致分析下会发现,s(x)是一个从1到81的数,不管x是多少.所以能够枚举1到8 ...
- codeforces 260 div2 C题
C题就是个dp,把原数据排序去重之后得到新序列,设dp[i]表示在前i个数中取得最大分数,那么: if(a[i] != a[i-1]+1) dp[i] = cnt[a[i]]*a[i] + dp[ ...
- codeforces 260 div2 B题
打表发现规律,对4取模为0的结果为4,否则为0,因此只需要判断输入的数据是不是被4整出即可,数据最大可能是100000位的整数,判断能否被4整出不能直接去判断,只需要判断最后两位(如果有)或一位能否被 ...
- Codeforces #541 (Div2) - E. String Multiplication(动态规划)
Problem Codeforces #541 (Div2) - E. String Multiplication Time Limit: 2000 mSec Problem Descriptio ...
- Codeforces #541 (Div2) - F. Asya And Kittens(并查集+链表)
Problem Codeforces #541 (Div2) - F. Asya And Kittens Time Limit: 2000 mSec Problem Description Inp ...
- 【Codeforces #312 div2 A】Lala Land and Apple Trees
# [Codeforces #312 div2 A]Lala Land and Apple Trees 首先,此题的大意是在一条坐标轴上,有\(n\)个点,每个点的权值为\(a_{i}\),第一次从原 ...
- Codeforces #180 div2 C Parity Game
// Codeforces #180 div2 C Parity Game // // 这个问题的意思被摄物体没有解释 // // 这个主题是如此的狠一点(对我来说,),不多说了这 // // 解决问 ...
- Codeforces #541 (Div2) - D. Gourmet choice(拓扑排序+并查集)
Problem Codeforces #541 (Div2) - D. Gourmet choice Time Limit: 2000 mSec Problem Description Input ...
- Codeforces #548 (Div2) - D.Steps to One(概率dp+数论)
Problem Codeforces #548 (Div2) - D.Steps to One Time Limit: 2000 mSec Problem Description Input Th ...
随机推荐
- PanGu-Coder2:从排序中学习,激发大模型潜力
本文分享自华为云社区<PanGu-Coder2:从排序中学习,激发大模型潜力>,作者: 华为云软件分析Lab . 2022年7月,华为云PaaS技术创新Lab联合华为诺亚方舟语音语义实验室 ...
- HashMap底层源码分析
HashMap底层原理实现 1.HashMap初始化 jdk1.8版本之后:数组+链表+红黑树实现,先去观看HashMap的构造方法: 构造方法: public HashMap() { this.lo ...
- C++算法之旅、08 基础篇 | 质数、约数
质数 在>1的整数中,如果只包含1和本身这两个约数,就被称为质数(素数) 866 试除法判定 866. 试除法判定质数 - AcWing题库 \(O(n)\) bool isprime(int ...
- 算法——AcWing算法提高课中代码和题解
文章目录 第一章 动态规划 (完成情况:64/68) 数字三角形模型 最长上升子序列模型 背包模型 状态机模型 状态压缩DP 区间DP 树形DP 数位DP 单调队列优化DP 斜率优化DP 第二章 搜索 ...
- xgo多线程
import threading import time #导入xgoedu from xgoedu import XGOEDU from xgolib import XGO #导入xgolib # ...
- 什么是 CSS?
1.什么是 CSS? CSS 指的是层叠样式表* (Cascading Style Sheets) CSS 描述了如何在屏幕.纸张或其他媒体上显示 HTML 元素 CSS 节省了大量工作.它可以同时控 ...
- Android 通过solid来定义不同边框的颜色,可以只定义一个边框的颜色
以下是设置按钮的右边框和底边框颜色为红色,边框大小为3dp,如下图: 在drawable新建一个 btnstyle.xml的文件,内容如下: <?xml version="1.0&qu ...
- Spring框架中 依赖注入和控制反转,最简单、最通俗的解释! 再加上一个AOP
首先依赖注入 == 控制反转,只不过控制反转这个词汇,让人产生了错误的理解,才使用新的词汇:依赖注入来替换到这个词汇. "依赖注入"是指一个对象应用另外一个对象来提供一个特殊的能力 ...
- K8s部署轻量级日志收集系统EFK(elasticsear + filebeat + kibana)
目录 K8s部署EFK(elasticsear + filebeat + kibana)日志收集 一.准备镜像 二.搭建Elasticsearch + kibana 1.在可执行kubectl命令的服 ...
- C#基数排序算法
前言 基数排序是一种非比较性排序算法,它通过将待排序的数据拆分成多个数字位进行排序. 实现原理 首先找出待排序数组中的最大值,并确定排序的位数. 从最低位(个位)开始,按照个位数的大小进行桶排序,将元 ...
