csp模拟二C咕咕东的奇妙序列

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 项数字是多少。
即对于s1s2s3s4…其中s1=12345…i,这样的序列,给出一个k,输出这个k项的数字是多少。

input:

输入由多行组成。
第一行一个整数q表示有q组询问
接下来第i+1行表示第i个输入 ,表示询问第 项数字。 其中特别要注意数据的范围。
在这里插入图片描述
output:

对于给定的每个k,输出数字。

例如:
输入:

5 1 3 20 38 56

输出:

1 2 5 2 0

思路:

一开始没什么思路的,然后前3个数据点很小,直接贴到string上,骗了30分。
主要考虑数据点特别大,1e18,直接顺序暴力来得算,只能过前六组。后来观察规律。首先数据点是一组一组的,并且每个大组里面还能分出来小的组。比如对前9个s,即s1到s9。可以看出是等差数列,公差为1。从s10到s99,公差为2,s100到s999公差为3。通过计算可以得到当s中最大数为9位数的时候即总位数超过1e18。故可以先按照这样的位数计算出当最大数为1位数,2位数等等的时候的总的位数。在这里有数组ret,记录每个小组的前n位数的位数,如ret[1],即为123456789,故ret[1]=9,ret[2],12345678910111213…99,故ret[2]=189。
依次类推。
另有数组记录前n位数的数据大组的位数a。如a[1]即位112123123412345123456123456712345678…12345678910
即a[1]=45,a[2]即为123456…9899,故a[2]=9045。通过观察规律,以及等差数列可以计算出来。

自此后每次得到一个k,便与之比较,可以直接得到k所在的那个大组,即最大数为(设为n位的范围)。如k=45刚好到9,即为一位数,k=9045时为99,即为两位数,若k=46,即在最大数为10的组,故k减去a[1],即减去前面的最大组的位数,可以得到在当前最大组中的位数。同时得到该数据所处大组中的上下界,即pow(10,n)-1和pow(10,n-1)。在这上下界中可以通过二分查找每一个小组的位数,并与k,比较,找到k所在的那个小组的,如k在最大数为21的小组,则k可以减去前20个小组。得到在这个小组中位数。在当前小组中可以继续分组,即12345678910111213…
可以依次查找数字为n位的位数,即记录在ret数组中,如若k在12上,可以减去前面的ret[1],即减去所有的1位数,即得到在当前的位数,并且在当前的数字中,所有数字的位数都相同,可以直接除法得到是第几个数字,求余得到在第几位。最后输出。

注意:

因为数据非常大,ll百度的为9e19,当时记录了a[9]的,大概是4e19,觉得没问题。后来本地跑没问题,vj上总是出错,也能过前3组。就总找不到错,然后问了学长,给的数据大概是爆了,本地也re了。然后对a[9]的数据处理了下,设为1e18,因为只要大于数据的最大数就可以了,然后换了个编译器就过了。。。。。整了一两天时间。其中还重写了两三次。。。。。 还有一个要注意的,二分的时候,因为二分的是每组中的数据,而不是准确的位数,然后最后的出来的数据可能不准。就取了得到的数据的左边和右边,一共三个数,重新进行判断,看这个位数是在哪个数据中。。

代码:

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;

long long q, k;
long long a[10];    //a里面装的如:1-9是45位 1-99是9045位  1-999是1395495位  的组的名次数 
long long l, r, mid;
long long ret[10];   //记录如:123456789是9位  1-99是189位  等等的单个组的位数 
long long t;         //记录位数 

long long f(long long tmp1) {  //求一组中数据直到t的位数,如10的位数是11 
	long long tmp2 = tmp1;
	long long r1 = 0;  //这个数的位数 
	while (tmp2 > 0) {
		r1++;
		tmp2 = tmp2 / 10;
	}
	long long ret = 0;
	for (long long i = 1; i < r1; i++) {
		ret = ret + (pow(10, i) - pow(10, i - 1)) * i;
	}
	ret = ret + (tmp1 - pow(10, r1 - 1) + 1) * r1;
	return ret;
}


int main() {
	ios::sync_with_stdio(0);

	memset(ret, 0, sizeof(ret));
	for (int i = 1; i <= 9; i++) {
		ret[i] = ret[i - 1] + (pow(10, i) - pow(10, i - 1)) * i;
	}
	memset(a, 0, sizeof(ret));
	long long sum = 1;
	for (long long i = 1; i <= 8; i++) {
		sum = sum * 10;
		long long n = sum - sum / 10;
		a[i] = n * i + n * (n - 1) * i / 2 + n * ret[i - 1] + a[i - 1];
	}
	a[9]=1e18;
	

	cin >> q;
	for (int i = 0; i < q; i++) {
		cin >> k;
		for (int j = 1; j <= 9; j++) {
			if (a[j] >= k) {
				k -= a[j - 1]; t = j; break;    //找到在几位数的分组中, j位数 
			}
		}

		l = 1;
		r = pow(10, t) - pow(10, t - 1);  //共有多少个j位数
		long long qi = f(pow(10, t - 1)); //这大组中第一个组的位数 
		long long tt = 0;     //记录mid的名次数 
		 
		while (l <= r) {
			mid = (l + r) / 2;
			tt = mid * qi + mid * (mid - 1) * t / 2;
			if (tt >= k)  r = mid - 1;
			else l = mid + 1;
		}
		//可能在mid的左右位置 即可能在 mid-1   mid 或者 mid+1组中 
		long long tt1=(mid-2)*qi+(mid-2)*(mid-3)*t/2;     //mid-1前面的位数       
		long long tt2 = (mid - 1) * qi + (mid - 1) * (mid - 2) * t / 2;  //mid前面的位数 
		long long tt3 = mid * qi + (mid - 1) * mid * t / 2;               //mid+1前面的位数 
		
		if(k<=tt2){
			k-=tt1; mid=mid-1;   //在mid-1组中 
		}else{
			if(k<=tt3){   //在mid组中 
				k-=tt2; 
			}else{
				k-=tt3; mid=mid+1;	
			} 
		}

		for (int j = 1; j <= 9; j++) {
			if (ret[j] >= k) {
				k -= ret[j - 1];   //在相同位数之间中找 比如在数字125中  减去1-99的 
				t = j;      
				break;  
			}
		}

		long long m1 = k / t;  //有几个整数
		long long m2 = k % t;  //剩余几位
		if (m2 == 0) {
			mid = pow(10, t - 1) + m1 - 1;
			cout << mid % 10<<endl;
		}
		else {
			mid = pow(10, t - 1) + m1;
			long long x = t - m2;
			mid = mid / pow(10, x);
			cout << mid % 10<<endl;
		}
	}
	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

csp模拟二C咕咕东的奇妙序列 的相关文章

  • 数据销毁、硬盘销毁的方法及安全性分析

    数据安全是信息安全的核心问题之一 xff0c 数据安全不仅包括数据加密 访问控制 备份与恢复等以保持数据完整性为目的的诸多工作 xff0c 也包括以完全破坏数据完整性为目的的数据销毁工作 数据销毁是指采用各种技术手段将计算机存储设备中的数据
  • 大宗文件销毁:看2000多箱32吨纸文件是如何被保密销毁的

    如果你的公司存放着10年前的客户采购订单和合同 xff0c 仓库租金每年都在上涨 xff0c 你会怎么处理这些文件呢 xff1f 以前的做法是当废纸卖掉 xff0c 以后的做法是选择适当的文件销毁服务商把这些文件销毁掉 xff0c 这是法律
  • 北京拟新规:回收手机、回收电脑时需当面清理个人信息

    近日 xff0c 北京市市场监督管理局发布了废弃电器电子产品回收规范征求意见稿 其中对收集过程有明确规范 xff1a 回收废旧手机 电脑等涉及个人隐私的电子产品时 xff0c 应当面清理用户个人信息 xff0c 维护客户隐私权 此外 xff
  • 回收电脑要当面销毁数据,提防高考考生信息泄露

    我最近在帮一个小妹妹研究高考填志愿 xff0c 却意外发现了一些奇怪的现象 原本很容易拿到的往年招生数据 xff0c 今年要在各种平台付费才能拿到 xff0c 否则考生和家长就只能看到一张残缺的院校分数线 xff0c 到底是谁在做这门缺德的
  • 数据作假,亚马逊关闭5万中国卖家真相

    图片来源 xff1a Unsplash 紧邻深圳华为坂田基地的五和大道 xff0c 是国内跨境电商卖家的聚集地 8月12日 xff0c 一位坂田跨境电商卖家从高层一跃而下 xff0c 有同行透露原因是 他的亚马逊店铺被封 xff0c 款提不
  • 超星大规模信息泄露,公安机关已经介入,你忘记销毁数据了吧?

    你的密码已被打包出售 xff01 在这个大数据时代 xff0c 个人信息都会记录在手机里 xff0c 且现如今多数的软件都要求实名制 xff0c 个人信息泄露早已成为不可回避的问题 xff0c 其可能导致的严峻后果也要求我们必须谨慎对待每一
  • 如何删除 AlibabaProtect.exe 和 Alibaba PC Safe Service ?

    起因 xff1a 最近被迫升级PC版的阿里旺旺以后 xff0c 系统就莫名其妙的出现问题 xff0c 首先是电脑系统被严重拖慢 xff0c 电脑从开机到正常进入系统至少要5分钟 xff0c 最令我恼火的是 xff0c 本人的电脑一旦接入外接
  • 跨境支付的信息安全知识

    恐怖了 xff0c PayPal这直接清零 xff0c 一点机会也不给了 跨境的大佬们应该都知道 xff0c 自今年3月以来陆续有独立站卖家收到PAYPAL发来的邮件 xff0c 邮件打过是关于账户因为违规被冻结或封禁 中国的跨境电商圈一石
  • 网络安全审查办公室对知网启动审查,数据安全是关键

    据中国网信网消息 xff0c 网络安全审查办公室有关负责人表示 xff0c 为防范国家数据安全风险 xff0c 维护国家安全 xff0c 保障公共利益 xff0c 依据 国家安全法 网络安全法 数据安全法 xff0c 按照 网络安全审查办法
  • 从法律角度看数据安全,数据销毁很重要

    2021年1月 xff0c 巴西的一个数据库30TB数据被破坏 xff0c 泄露的数据包含有1 04亿辆汽车和约4000万家公司的详细信息 xff0c 受影响的人员数量可能有2 2亿 xff1b 2021年3月 xff0c 印度800万核酸
  • 大数据下的数据安全治理,数据销毁很重要

    企业数据安全治理的本质是建立 维护一组企业的 数据法规 xff0c 由这些法规来规范企业所有人员的所有数据活动 任何企业都在使用 产生数据 如果数据是一次性使用的 数据的产生仅仅是副产品 xff0c 那么数据治理就无太大意义 xff0c 应
  • IT界头条2022年7月1日版

    2022年7月 1日 1 国家网信办发布 互联网用户账号信息管理规定 8月1日起施行 2 腾讯 QQ 回应大批账号被盗 xff1a 用户扫描不法分子伪造的游戏登录二维码 3 网络安全审查办公室对知网启动网络安全审查 4 俄罗斯对谷歌传播诋毁
  • 数据安全与销毁案例:美国最近发生大规模数据泄露

    据福克斯新闻网6月20日报道 xff0c 一位网络安全专家称 xff0c 美国近日发生一起大规模的选民信息泄露事件 xff0c 将近2亿选民的个人信息遭意外曝光 网络风险研究员克里斯 维克里在其博客文章中表示 xff0c 与美国共和党全国委
  • 回收销毁,IT界头条2022年7月12日版

    2022年7月 12日 1 关于构建数据基础制度更好发挥数据要素作用的意见 审议通过 2 微软在新报告中揭示了俄乌冲突期间的网络战细节 3 西北工业大学遭受境外网络攻击 xff0c 西安警方已立案侦查 4 立陶宛对俄罗斯 禁运 后遭网络攻击
  • 回收销毁,IT界头条2022年7月7日版

    2022年7月 7日 1 关于构建数据基础制度更好发挥数据要素作用的意见 审议通过 2 微软在新报告中揭示了俄乌冲突期间的网络战细节 3 西北工业大学遭受境外网络攻击 xff0c 西安警方已立案侦查 4 立陶宛对俄罗斯 禁运 后遭网络攻击
  • 数据安全与销毁:数据安全已经上升到了国家战略层面

    日前 xff0c 中央全面深化改革委员会审议通过了 关于构建数据基础制度更好发挥数据要素作用的意见 xff08 下称 意见 xff09 xff0c 明确提出 把安全贯穿数据治理全过程 业内专家表示 xff0c 数据安全已经上升到了国家战略层
  • C++用带有默认参数的函数实现,求2个或3个正整数中的最大数

    1 题目要求如下 xff1a C 43 43 用带有默认参数的函数实现 xff0c 求2个或3个正整数中的最大数 2 来吧 xff0c 展示 xff1a include lt iostream gt using namespace std
  • 程序设计思维与实践 Week2 作业B "倒水问题"

    数据 xff1a Sample Input xff1a 2 7 5 2 7 4 Sample Output xff1a fill B pour B A success fill A pour A B fill A pour A B succ
  • armbian的换源

    安装好armbian和众多Linux一样 xff0c 最重要的就是把原来的官方源给替换掉 xff0c 换成国内的源 xff0c 当然个人建议还是把官方的源备份一下以防出错 cp etc apt sources list etc apt so
  • Ubuntu18.04上网断断续续

    刚刚体验了一把Ubuntu18 04 LTS xff0c 有个小问题就是 xff0c 网络链接老是断断续续 后来在这里找到了解决方法 xff1a span class hljs built in sudo span gedit etc pp

随机推荐

  • Coursera Machine Learning 第二周 quiz Octave/Matlab Tutorial 习题答案

    1 Suppose I first execute the following Octave Matlab commands 1 2
  • C语言random问题

    总 结一下C语言random的用法 xff1a srand xff08 xff08 int xff09 time xff08 NULL xff09 xff09 用于设定随机数种子 rand 100 xff0c 产生 0 99 的随机数 如果
  • java.util.regex.PatternSyntaxException

    在处理字符串用到String replaceAll 这个方法的时候出现了这个异常 Exception in thread 34 main 34 java util regex PatternSyntaxException Dangling
  • Shell 脚本 Debug 方法

    可能有的程序员在对程序调试的时候用printf或者echo将信息挨条打印出来 xff0c 但是这比较麻烦 xff0c 因为在交付的时候还要将这些语句一条条删除 xff0c 下面对shell debug的方法稍微做一个总结 xff1a 1 使
  • JAVA 点击按钮展开一个新的Jpanel

    问题不太容易用语言来描述 xff0c 先直接上图吧 xff1a 点击按钮之前 xff1a 点击按钮之后 xff1a 那么如何实现这种功能呢 xff1f 首先在图一中的主JFrame中添加一个JScrollPane xff0c 在点击按钮后n
  • java 实现日历选择器

    首先引用com qt datapicker DatePicker 包实现如下 xff1a package Date import java awt event ActionEvent import java awt event Action
  • 获取JPasswordField组件中的密码

    在JTextField中有一个方法getText xff0c 可以返回组件中输入的字符串 xff0c 但是对于JPasswordField类 xff0c getText 方法已经不适用了 xff0c 执意使用的话 xff0c 获取的也是一串
  • 指针的大小

    说这个之前先了解几个概念 xff1a 字长 xff1a 字长是CPU的主要技术指标之一 xff0c 指的是CPU一次能并行处理的二进制的位数 xff0c 字长是8的整倍数 xff0c 通常的PC机的字长为16位 xff0c 32位 xff0
  • 程序设计思维与实践 Week6 作业A氪金带东树的直径的应用

    题意 xff1a 依次输入图中的点以及边权等信息 xff0c 最后输出每个点在图中所能到达的最远的路线的长度 例如所给的样例 xff1a input 输入文件包含多组测试数据 对于每组测试数据 xff0c 第一行一个整数N N lt 61
  • 《UNIX环境高级编程》(第二版)找不到apue.h问题

    UNIX环境高级编程 xff08 第二版 xff09 这本书 xff0c 实例程序中都包含头文件apue h xff0c 寻找linux usr include中 xff0c 缺找不到此头文件 xff0c 因此编译时会出错 实际上apue
  • java程序中,如何安全的结束一个正在运行的线程?

    如何停止java的线程一直是一个开发多线程程序常遇到的一个问题 在Java的多线程编程中 xff0c java lang Thread类型包含了一些列的方法start stop stop Throwable and suspend dest
  • RoboMaster视觉教程(1)摄像头

    观文有感 之 RoboMaster视觉教程 xff08 1 xff09 摄像头 闲来垂钓碧溪上 今天钓到一篇RM视觉摄像头的好文 xff0c 记录一下笔记 xff1a 文章目录 观文有感 之 RoboMaster视觉教程 xff08 1 x
  • 如何成为一名很酷的机器人工程师

    观文有感 之 如何成为一名很酷的机器人工程师 闲来垂钓碧溪上 今天来钓一波职业规划 xff0c 记录一下笔记 xff08 特别注意 xff1a 本文中大部分内容是复制粘贴的 xff0c 只有少数位置的删改和整理 xff0c 目的是分享一下大
  • 不同层面禁用PUT、DELETE、HEAD、TRACE、OPTIONS请求方式

    背景 对于一些对安全级别要求高的应用 xff0c 可能只允许有GET和POST请求 xff0c 其他请求方式需要禁用 xff0c 那么可以从多个层面来进行禁用 下面从大范围禁用到小范围禁用罗列如下 xff08 假定服务容器是tomcat x
  • keil中出现Undefined symbol FLASH_PrefetchBufferCmd (referred from main.o)等问题解决办法

    在keil中仿照别人的程序写了RCC初始化的程序 xff0c 编译后出现以下问题 obj pro1 axf Error L6218E Undefined symbol FLASH PrefetchBufferCmd referred fro
  • 接口测试——requests接口请求(十)

    1 requests库介绍与安装 requests库介绍 requests是一款非常火爆且常用的Python三方库能够实现HTTP协议的各种请求方法使用简单易上手 requests库的安装方法 pip install requests安装成
  • 微信聊天记录提取及分析(wordcloud+pyecharts)

    0 前言 之所以想要提取微信的聊天记录并分析是因为也开始再学习python xff0c 但是单纯看看语法什么的又很无趣 xff0c 无意间看到python可以进行微信聊天记录的分析 xff0c 就自己尝试做了一下 xff0c 感觉还是挺有意
  • 【C语言】输入一个正整数,判断其是否为素数

    span style font family none strong span style font size 18px 素数的定义 xff1a span strong span 素数 xff08 prime number xff09 又称
  • C 语言实例 -求分数数列1/2+2/3+3/5+5/8+...的前n项和

    程序分析 xff1a 抓住分子与分母的变化规律 xff1a 分子a xff1a 1 2 3 5 8 13 21 34 55 89 144 分母b xff1a 2 3 5 8 13 21 34 55 89 144 233 分母b把数赋给了分子
  • csp模拟二C咕咕东的奇妙序列

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