2021-11-23:规定:L[1]对应a,L[2]对应b,L[3]对应c,…,L[25]对应y。
S1 = a,
S(i) = S(i-1) + L[i] + reverse(invert(S(i-1)));
解释invert操作:
S1 = a,
S2 = aby。
假设invert(S(2)) = 甲乙丙,
a + 甲 = 26, 那么 甲 = 26 - 1 = 25 -> y,
b + 乙 = 26, 那么 乙 = 26 - 2 = 24 -> x,
y + 丙 = 26, 那么 丙 = 26 - 25 = 1 -> a,
如上就是每一位的计算方式,所以invert(S2) = yxa。
所以S3 = S2 + L[3] + reverse(invert(S2)) = aby + c + axy = abycaxy,
invert(abycaxy) = yxawyba, 再reverse = abywaxy。
所以S4 = abycaxy + d + abywaxy = abycaxydabywaxy。
直到S25结束。
给定两个参数n和k,返回Sn的第k位是什么字符,n从1开始,k从1开始,
比如n=4,k=2,表示S4的第2个字符是什么,返回b字符。
来自网易。

答案2021-11-23:

单边递归。
时间复杂度:O((1)。数量有限。
额外空间复杂度:O(1)。数量有限。

代码用golang编写。代码如下:

package main

import "fmt"

func main() {
ret := kth(7, 1)
fmt.Printf("%c\r\n", ret)
ret = kth(7, 2)
fmt.Printf("%c\r\n", ret)
ret = kth(7, 3)
fmt.Printf("%c\r\n", ret)
ret = kth(7, 4)
fmt.Printf("%c\r\n", ret)
ret = kth(7, 5)
fmt.Printf("%c\r\n", ret)
ret = kth(7, 6)
fmt.Printf("%c\r\n", ret)
ret = kth(7, 7)
fmt.Printf("%c\r\n", ret)
} var lens []int func fillLens() {
lens = make([]int, 26)
lens[1] = 1
for i := 2; i <= 25; i++ {
lens[i] = (lens[i-1] << 1) + 1
}
} // 求sn中的第k个字符
// O(n), s <= 25 O(1)
func kth(n, k int) byte {
if lens == nil {
fillLens()
}
if n == 1 { // 无视k
return 'a'
}
// sn half
half := lens[n-1]
if k <= half {
return kth(n-1, k)
} else if k == half+1 {
return byte('a' + n - 1)
} else {
// sn
// 我需要右半区,从左往右的第a个
// 需要找到,s(n-1)从右往左的第a个
// 当拿到字符之后,invert一下,就可以返回了!
return invert(kth(n-1, ((half+1)<<1)-k))
}
} func invert(c byte) byte {
return byte(('a' << 1) + 24 - c)
}

执行结果如下:


左神java代码

2021-11-23:规定:L[1]对应a,L[2]对应b,L[3]对应c,...,L[25]对应y。 S1 = a, S(i) = S(i-1) + L[i] + reverse(invert(S(的更多相关文章

  1. 2021.11.09 P2292 [HNOI2004]L语言(trie树+AC自动机)

    2021.11.09 P2292 [HNOI2004]L语言(trie树+AC自动机) https://www.luogu.com.cn/problem/P2292 题意: 标点符号的出现晚于文字的出 ...

  2. Noip模拟46 2021.8.23

    给了签到题,但除了签到题其他的什么也不会.... T1 数数 人均$AC$,没什么好说的,就是排个序,然后双指针交换着往中间移 1 #include<bits/stdc++.h> 2 #d ...

  3. 2021.11.4测试T1-妹子

    题目 今天测试,直接挂完了 写了四个小时,最后发现自己题目理解错误了 有两个区间,在输入了 \(l\) 和 \(r\) 以后,进行查询 \[ min(max(a_1,a_2,...a_p,b_{p+1 ...

  4. 2021.11.30 eleveni的水省选题的记录

    2021.11.30 eleveni的水省选题的记录 因为eleveni比较菜,eleveni决定先刷图论,再刷数据结构,同时每天都要刷dp.当然,对于擅长的图论,eleveni决定从蓝题开始刷.当然 ...

  5. 2021.11.16 P2375 [NOI2014] 动物园(EXKMP+差分)

    2021.11.16 P2375 [NOI2014] 动物园(EXKMP+差分) https://www.luogu.com.cn/problem/P2375 题意: PS:这道神题的背景让人疑惑,重 ...

  6. 2021.11.11 EXKMP

    2021.11.11 EXKMP https://www.luogu.com.cn/problem/P5410 下标以1开头: #include<cstdio> #include<i ...

  7. Beta周第14次Scrum会议(11/23)【王者荣耀交流协会】

    一.小组信息 队名:王者荣耀交流协会 小组成员 队长:高远博 成员:王超,袁玥,任思佳,王磊,王玉玲,冉华 小组照片 二.开会信息 时间:2017/11/23 17:02~17:14,总计12min. ...

  8. 第35次Scrum会议(11/23)【欢迎来怼】

    一.小组信息 队名:欢迎来怼小组成员队长:田继平成员:李圆圆,葛美义,王伟东,姜珊,邵朔,阚博文小组照片 二.开会信息 时间:2017/11/23 17:03~17:24,总计21min.地点:东北师 ...

  9. 2018.11.23 浪在ACM 集训队第六次测试赛

    2018.11.23 浪在ACM 集训队第六次测试赛 整理人:刘文胜 div 2: A: Jam的计数法 参考博客:[1] 万众 B:数列 参考博客: [1] C:摆花 参考博客: [1] D:文化之 ...

  10. 日常Javaweb 2021/11/19

    Javaweb Dao层: //连接数据库,实现增查功能 package dao; import java.sql.Connection; import java.sql.DriverManager; ...

随机推荐

  1. 使用python-gitlab获取本地gitlab仓库project信息的方法

    代码中有注释,直接看代码 #coding:utf8 #!/usr/bin/env python #@author: 9527 import gitlab import openpyxl import ...

  2. 关于springboot使用mybatis查询出现空指针,以及debug出现All Elements all Null的解决方法

    数据库中命名方式是带有下划线 ,然后在实体类中使用的是驼峰命名法 ,那么就需要在application.yml文件中加上 自闭了,那么简单的问题,没了解过真是摸不着头脑

  3. flutter issue---->Scaffold.of(context)

    当我们想showSnackBar的时候,需要通过Scaffold.of(context)得到Scaffold.但是如果这个context用错的话,flutter就会抛出错误.下面我们通过代码仔细看一下 ...

  4. 在 Rainbond 上使用 Curve 云原生存储

    Curve 是网易主导自研的现代化存储系统, 目前支持文件存储(CurveFS)和块存储(CurveBS). CurveBS 的核心应用场景主要包括: 虚拟机/容器的性能型.混合型.容量型云盘或持久化 ...

  5. Sevlet规范:HttpServlet类 和 HttpServletRequest接口 源码解析

    Sevlet规范:HttpServlet类 和 HttpServletRequest接口 源码解析 每博一文案 命运总是不如人愿,但往往是在无数的痛苦总,在重重的矛盾和艰辛中,才是人成熟起来. 你,为 ...

  6. 在Ubuntu中安装Samba文件服务

    点击蓝字 关注我们 First Frost 在Ubuntu中安装Samba文件服务 Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件,而SMB是Server Message ...

  7. 二进制安装Kubernetes(k8s) v1.24.0 IPv4/IPv6双栈 (三主俩从)

    二进制安装Kubernetes(k8s) v1.24.0 IPv4/IPv6双栈 (三主俩从) Kubernetes 开源不易,帮忙点个star,谢谢了 介绍 kubernetes二进制安装 后续尽可 ...

  8. SQL里按照年月日分组统计

    Mysql中使用DATE_FORMAT函数实现是相对简单的. 根据format字符串格式化date值.下列修饰符可以被用在format字符串中: %M 月名字(January--December) % ...

  9. [SVN]SVN checkout 功能不可用 右键只看到提交和更新,没有显示checkout[转载]

    不要在受SVN控制的文件夹里点右键,因为这个文件夹已经在SVN控制之下,当然不会允许在里面嵌套另一个SVN版本库 换个不受控的文件夹点右键,比如: D盘根目录 X 参考文献 SVN checkout ...

  10. UESTC__ACM 1264 人民币的构造

    链接地址:https://acm.uestc.edu.cn/contest/198/problem/J 我们都知道人民币的面值是1.2.5.10,为什么是这个数值呢,我们分析了下发现,从1~10的每个 ...