咕咕东的奇妙序列

2023-05-16

题意:

咕咕东 正在上可怕的复变函数,但对于稳拿A Plus的 咕咕东 来说,她早已不再听课,此时她在睡梦中 突然想到了一个奇怪的无限序列:112123123412345 …这个序列由连续正整数组成的若干部分构成,其 中第一部分包含1至1之间的所有数字,第二部分包含1至2之间的所有数字,第三部分包含1至3之间的所 有数字,第i部分总是包含1至i之间的所有数字。所以,这个序列的前56项会是 11212312341234512345612345671234567812345678912345678910,其中第1项是1,第3项是2,第20项是 5,第38项是2,第56项是0。咕咕东 现在想知道第 k 项数字是多少!但是她睡醒之后发现老师讲的东西 已经听不懂了,因此她把这个任务交给了你。

输入格式:
输入由多行组成。
第一行一个整数q表示有q组询问
接下来第i+1行表示第i个输入 ,表示询问第 项数字。

输出格式:
输出包含q行
第i行输出对询问 的输出结果。

数据范围:
在这里插入图片描述
样例输入:

5 1 3 20 38 56

样例输出:

1 2 5 2 0

思路:

题意分析:
这道题数据量挺大,单纯暴力求解肯定不太行,但前3组的数据量不大,可以骗分。
对于大数据量开始观察数据特点,将1看成一个小组,12看成第二个小组,123看成第三个小组依次进行下去,可以发现前9个小组的最大值都是一位数,每组的数位为公差为1的等差数列,将前9个小组看成一个大组,由等差数列求和公式可得第一大组的数位和b[1]=45,同时记录拥有第一大组最大值的第9小组的位数a[1]=9。依次进行下去,可知第二大组为10-99,每组的数位为公差为2的等差数列,由公式计算得第二大组的数位总数b[2]=9045,同时第99小组的位数a[2]=189,按照上面的思路进行下去,其实每个大组的差别就是包含的小组中最大值的位数不相等,即每个大组的方差不一样。
这样计算下去九个大组位数超过1e18,所以这里设了a[10],b[10],但是这里有个问题b[9]数据量太大了,已知上限为1e18,所以这里用上限代替实际的大数值。

具体实现:
每次查找第k位,先确定它位于哪个大组,即与b[i]进行比较。k减去所在大组前面的位数之后可以得到在当前大组中的位数,同时得到该数据所处大组中的上下界。
在一个大组中查找k这时数据量还是十分庞大,怎么简化操作?由于一个大组中每个小组的位数都是有序的(相差方差个),所以可以使用二分法。
在大组中通过二分查找每一个小组的位数,确定k所在的小组。
一个小组内还可以继续分组,同样位数有序可以继续使用二分法继续查找,减去前面的a[i]剩余的是与其位数相等的数,在这里面确定是第几个数字的第几位。

关键点:
上面的实现还挺啰嗦的,其实关键点就是找到每组数据之间关系吧(等差啊,求和啊,是数学问题)。
再就是数据量挺大的,简化操作,能够想到用二分。
再就是数据范围 long long,仔细一点不要因为一个顺手写成int然后找半天错误找不出来。
最后的最后,实在做不出来的时候前三个点还能骗点分。

代码:

#include<cstdio>
#include<cmath>
using namespace std;

long long a[10],b[10];					//a[i]记录最大i位数那一小组的位数
                                            //b[i]记录直到最大i位数的数位
long long k,c,ans;

void toNum(long long x){
	long long t1=x,t2=0;  c=0;
	while(t1>0){t2++;t1/=10;}							//t2记录数的位数
	for(long long i=1;i<t2;i++)
		 c+=i*(pow(10,i)-pow(10,i-1)); 					//求位数小于x的数的位数和
	c+=(x-pow(10,t2-1)+1)*t2;						//加上位数和x相同的数的位数 
}

void solve(long long x,int y){
	long long t1=(x-2)*c+(x-2)*(x-3)*y/2;				//记录最大值为x-1前面的位数 
	long long t2=(x-1)*c+(x-1)*(x-2)*y/2;				//x前面的位数 
	long long t3=x*c+(x-1)*x*y/2; 						//x+1
	if(k<=t2) {k-=t1;x-=1;}
	else if(k<=t3) k-=t2;
	else {k-=t3;x+=1;}
	long long p=0;
	for(long long i=1;i<=9;i++){
		if(k<=a[i]){
			k-=a[i-1];p=i;break;						//在与待查找的数字有相同位数的数字中查找 
		}
	}
	long long v1=k/p; long long v2=k%p;
	if(v2==0) x=pow(10,p-1)+v1-1;
	else{
			x=pow(10,p-1)+v1;
			long long j=p-v2;
			x=x/pow(10,j);
		}
	ans=x%10;
}

int main(){
	int q;
	scanf("%d",&q);
	for(long long i=1;i<=9;i++)
		a[i]=a[i-1]+i*(pow(10,i)-pow(10,i-1));
	long long u=1;
	for(long long i=1;i<=9;i++){
		u*=10;
		long long n=u-u/10;
		b[i]=n*i+n*(n-1)*i/2+n*a[i-1]+b[i-1];
	}   
	for(int i=0;i<q;i++){
		scanf("%lld",&k);
		int w=0;
		for(int j=1;j<=9;j++){
			if(k<=b[j]){
				w=j;							//记录是在几位数的区间里
				k-=b[j-1];break;								 
			}
		}
		long long l=1,r=pow(10,w)-pow(10,w-1),mid=0;                 //i位数的左右端点,i位数有r个 
		toNum(pow(10,w-1));								//t1=mid的位数 
		while(l<=r){								
			mid=(l+r)/2;
			long long t1=mid*c+mid*(mid-1)*w/2;						//确定在最大值为几的组内 
			if(t1<k)  l=mid+1;
			else r=mid-1;
		}
		solve(mid,w);
		printf("%d\n",ans);
	}
	return 0;
} 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

咕咕东的奇妙序列 的相关文章

  • Debian9.12镜像下载及网络、软件源配置

    Debian9 12安装 配置 文章目录 获取镜像虚拟机安装配置网络配置合适的仓库源更新软件包 安装所需工具 搭建环境Debian镜像下载链接其他资源 获取镜像 Debian9 12 Debian 9 12 官方原版镜像下载 任我乐 ren
  • dpkg: 处理软件包 xxx (--configure)时出错 解决办法

    第一步 xff1a 备份 sudo mv var lib dpkg info var lib dpkg info bk 1 第二步 xff1a 新建 sudo mkdir var lib dpkg info 1 第三步 xff1a 更新 s
  • 解决SQL server中提示对象名无效

    用SQL server的时间不长 xff0c 但现在遇到两种情况 xff0c 在这里分别说一下解决办法 1 刚打开SQL server Manager Studio xff0c 想看看表里的信息 xff0c 就写一个查询语句 xff0c 结
  • 解决maven无法下载依赖的问题

    大概从2020年1月底的时候第一次遇到这个问题 xff0c 当时在假期期间自己写小Demo玩 xff0c 依赖下载不了就去找了个包放进去 xff0c 并没有太在意 直至几天后因为疫情在家远程办公的时候新项目的依赖一直下载不了 xff0c 困
  • 解决idea已经添加外部jar包但仍然找不到包的错误

    对于开发人员来说 xff0c 开发项目时除了maven下载的依赖之外 xff0c 一般都需要引入一些公司内部封装的jar包依赖 xff0c 但是有时候会出现明明已经build path了 xff0c 但是build项目的时候还是报错说某某包
  • vmware安装虚拟机提示此主机不支持64位系统,此系统无法运行

    原因 安装虚拟机提示这个是因为和电脑上的Hyper V服务冲突了 xff0c 解决办法是关闭Hyper V服务就可以了 步骤 打开控制面板找到程序和功能 点击启用或关闭Windows功能 找到Hyper V xff0c 此时状态是勾选的 取
  • springboot项目启动指定项目外部yml配置文件

    spring boot的经典项目配置是application yml xff0c 在项目打包部署运行的时候 xff0c 这个文件也会一同打进包里 xff0c 随之启动 这就带来了一个问题 xff1a 如果部署的服务器发生了变动 xff0c
  • MyEclipse安装SVN插件及插件下载地址

    在网上找了很多安装教程 xff0c 但是找到的subclipse的下载地址都访问不到 xff0c 不知道是不是需要翻墙 xff0c 我自己找了个测试过有效的 xff1a 网盘下载地址 xff1a https pan baidu com s
  • Linux 安装并配置 OpenLDAP 新编(3)YUM安装

    Linux 安装并配置 OpenLDAP 新编 xff08 3 xff09 YUM安装 我实操OpenLDAP的过程 xff0c 是先根据官网资料编译安装 xff0c 大约花费了近2周时间 xff0c 也有点陷入牛角尖了 xff0c 一时不
  • org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException

    问题描述 xff1a 1 在application yml文件里的注释乱码 2 idea编辑器提示这个文件被错误的编码UTF 8加载 xff0c 并提示重新使用GBK加载等等 3 项目启动报错 xff1a java nio charset
  • 解决java.lang.IllegalStateException: Cannot call sendError() after the response has been committe

    错误截图 xff1a 错误代码 xff1a 错误原因 xff1a 输出流关闭之后 xff0c socket也已经关闭 xff0c 不能再次发送response xff0c 所以导致错误的就是return的返回值信息 xff0c 这时候把re
  • Object转成JSONObject

    object转jsonObject的时候经常会因为符号报错 xff0c 类似于 xff1a span class token function expect span at span class token number 0 span ac
  • Comparison method violates its general contract!null

    span class token annotation punctuation 64 Override span span class token keyword public span span class token keyword i
  • bigDecimal存到数据库后变成0

    检查数据库该字段 xff0c 小数点栏是不是默认为0了 xff0c 像这样 xff1a 如果是 xff0c 就改成你需要该字段保留的小数点后位数 xff0c 比如你要保留两位 xff0c 这一栏就改成2
  • [教程] 中兴光猫f477V2改固话桥接,支持电脑、手机SIP APP拨打

    坐标北京 联通免费开通固话 xff0c 新给的光猫是比较新的型号中兴F477V2 光猫本身支持voip xff0c 买个最普通的座机接到phone口就可以用了 xff0c 固话号码是01082xxxxxxx打头的 xff0c 资费市内0 1
  • PVE安装笔记

    PVE新安装 1 安装 iso准备 xff0c 系统盘目录有6 2的iso xff0c 挺好用 准备一个U盘 xff0c 最好是usb2 0的 xff0c 用ultraiso写入硬盘镜像 xff0c 注意选择raw格式 xff08 非常重要
  • pve 6.2增加CPU温度显示

    1 安装PVE xff0c 建议用refus烧录U盘 xff0c 记得选DD镜像模式 2 iso文件名 proxmox ve 6 2 1 iso 3 安装 4 替换如下文件中相关字段 具体参考上传文件pve主页添加温度显示 6 2 zip
  • VC++工程头文件重复和循环引用

    复杂工程中头文件众多 xff0c 很容易发生包含顺序 重复引用以及循环引用导致的编译链接错误 xff01 最近整理工程中文件引用时遇到不少这方面的问题 xff01 一般来说 xff0c 包含顺序问题会导致某些类型 函数等无定义 xff0c
  • PyQt+界面防卡死+selenium+多进程爬取图片一次打通!

    创建MyUrl py 编写爬取图片代码 爬取图片 xff0c 实际上就是对网页信息的读取 而selenium可以很好的做到这一点 xff0c 相对于beautifulsoup只能爬取静态前端源码的缺点 xff0c selenium可以解析由
  • LDAP应用篇(1)CentOS8接入登录

    LDAP应用篇 xff08 1 xff09 CentOS8接入登录 相比于服务器端的配置 xff0c 做为客户端接入LDAP的文章和资料就多了许多 能看到的文章都介绍了使用 authconfig 或者 authconfig tui xff0

随机推荐

  • MySQL OCP888题解031-使用X509加密连接

    文章目录 1 原题1 1 英文原题1 2 中文翻译1 3 答案 2 题目解析2 1 题干解析2 2 选项解析 3 知识点3 1 知识点1 xff1a X509 X 509 3 2 知识点2 xff1a 创建需要X509加密的账户 CREAT
  • 【PIL】验证码验证

    import random from PIL import Image ImageDraw ImageFont ImageFilter 图片的写文本的基础使用 img 61 Image new mode 61 34 RGB 34 size
  • 解决80端口被占用的问题

    先前在安装warmpsever的时候 xff0c 图标颜色总是橘黄色的不正常状态 xff0c 弹出系统错误提示框 xff1a 无法启动此程序 xff0c 因为计算机中丢失 MSVCR110 dll 尝试重新安装该程序以解决此问题 百度了一下
  • 《Python程序设计(第3版)》配套教学大纲

    配套教材 xff1a Python程序设计 xff08 第3版 xff09 xff0c xff08 ISBN xff1a 978 7 302 55083 9 xff09 xff0c 董付国 xff0c 清华大学出版社 xff0c 2020年
  • ROS学习番外篇11—Winows的WSL2(Linux子系统)下安装ROS并搭建开发环境

    一般ROS的开发是在Ubuntu下面进行的 自从今年6月份微软为WSL装配上了gui神器之后 我们又多出了一种新的玩法 那就是在Windows下用WSL2来安装Ubuntu虚拟机来做ROS的开发 虽然可能有老哥要说 之前搞个虚拟机不也一样
  • 数据结构5 栈和队列

    1 1 分数 2 作者 DS课程组单位 浙江大学 Run the following operations on a stack S Push S 1 Push S 2 Pop S Push S 3 Pop S Pop S The outp
  • git命令之快速搭建远程仓库

    首先使用系统管理员账号登录远程服务器 xff0c 具体步骤如下所示 xff1a 1 安装git应用程序 sudo apt get install git 2 创建git用户组和git用户 xff0c 具体命令如下所示 xff1a group
  • AM5728(AM5708)开发实战之使能u-boot看门狗

    一 看门狗介绍 为了使嵌入式系统能够在异常情况下自动复位 xff0c 一般需要引入看门狗 看门狗可以分为如下几类 xff1a 1 CPU自带的看门狗模块 优点 xff1a 可以灵活配置溢出时间 xff0c 可以随时禁用 缺点 xff1a 需
  • AM5728(AM5708)开发实战之调试DP83822 LED

    一 LED寄存器分析 MLEDCR即Multi LED Control Register 地址为0x0025 MLEDCR 1 0 设置MLED路由功能 具体如下所示 0x00表示MLED功能路由到COL PIN29 0x03表示MLED功
  • AM5728(AM5708)开发实战之移植OpenCV-3.4.11

    一 概述 OpenCV是一个开源的跨平台计算机视觉库 xff0c 可以运行在Linux Windows Mac OS等操作系统上 xff0c 它为图像处理 模式识别 三维重建 物体跟踪 机器学习提供了丰富的算法 由于OpenCV依赖包特别多
  • 国外大神深度评测Firefly-RK3399 Android8.1固件

    国外大神深度评测Firefly RK3399 Android8 1固件 Review of Firefly RK3399 Board with Android 8 1 Firmware 内容详细介绍了组装Firefly RK3399 xff
  • 设备树之I2C和SPI实例

    I2C实例 clock frequency i2c总线频率 xff0c 常用值有100000 xff0c 400000 address cells 该属性值必须为1 size cells 该属性值必须为0 i2c具体实例如下图所示 xff1
  • 设备树之GPIO和中断实例

    概述 设备树不仅仅描述常规硬件信息 xff0c 还可以描述中断 xff0c GPIO xff0c DMA xff0c PINCTRL xff0c 时钟 xff0c 电源管理等内核基础设施信息及其使用情况 xff0c 下面重点介绍中断 xff
  • 设备树之HDMI输出实例

    一 HDMI输出实例详解 图1 图2 图3 图1 xff0c 图2和图3构成了一个典型的HDMI输出链路 图1 xff1a HDMI接口设备结点 xff0c 该HDMI接口使用TYPE A接口 注意 xff1a HDMI接口结点名称为con
  • 设备树之MMC总线实例

    MMC总线重要属性 address cells 61 lt 1 gt 该属性值必须为1 size cells 61 lt 0 gt 该属性值必须为0 max frequency mmc总线最大时钟频率 bus width mmc总线位宽 x
  • Coursera计算概论A(李戈)教授课程

    昨天 xff08 4月29日 xff09 结束了 计算概论A的课程 xff0c 我对C语言有了更多的了解 这部课程算是我踏入程序设计领域的一个敲门砖吧 对C程序语言的理解 xff1a C语言简单 高效 易懂 xff0c 重点在于 1 结构
  • linux 命令行报bash command not found的解决办法

    命令行报bash command not found的解决办法 xff08 几乎所有命令 xff09 命令行输入命令执行后报 bash command not found 这是由于 系统PATH设置问题 xff0c PATH没有设置对 xf
  • cprintf函数调用到屏幕(cga)输出流程分析

    本文所有代码均为JOS内核源代码 xff0c 可以从MIT 6 828课程网站下载 概述 xff1a 所有向屏幕输出的过程 xff0c 一定是经过参数处理 xff0c 最后组织成一个字符数组 BUFFER xff0c 这个数组 xff08
  • laravel API 接受PUT请求Content-Type:application/x-www-form-urlencoded

    微信小程序 xff1a wx request url https m sybmfw cn api ys user 43 openid method put data that data formdata header content typ
  • 咕咕东的奇妙序列

    题意 xff1a 咕咕东 正在上可怕的复变函数 xff0c 但对于稳拿A Plus的 咕咕东 来说 xff0c 她早已不再听课 xff0c 此时她在睡梦中 突然想到了一个奇怪的无限序列 xff1a 112123123412345 这个序列由