模拟+二分 poj-1019-Number Sequence

无人驾驶汽车系统入门(三十二)——FEC算法:点云快速欧几里得聚类实战解析 本文深入解析了FEC算法在无人驾驶点云聚类中的高效应用,通过逐点处理策略和体素栅格预分割技术,实现了比传统欧几里得聚类快百倍的速度。文章详细介绍了算法原理、Python实现及参数调优指南,并对比了FEC与传统算法的性能差异,为无人驾驶系统开发提供了实用解决方案。 阅读详情

题目链接:

http://poj.org/problem?id=1019

题目大意:

Sk表示123...k

把S1S2S3...Sk排成一行 比如:112123123412345123456....

求第i个数字是多少。

解题思路:

如果Sk表示123...k所占的位数,显然Sk=Sk-1+Cal(k)。Cal(k)表示k的位数。

先打表预处理sum[i]=S1+S2+..+Si;

然后在sum[i]中查找第n个属于哪一个Sk. 

在同一个Sk中,一位有1~9 9个,2位有10~99 90个   3位有100~999 900个。。。所以可以先找到属于该Sk中的第几位的数。

找到位数后,就可以算出属于该位的第几个数了  比如四位的第一个数1000,第二个数为1001,,,

找到该位数的第几个后,再找属于该数的第几位,比如1234的第二位是2.

代码:

#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<stack>
#include<list>
#include<queue>
#define eps 1e-6
#define INF 0x1f1f1f1f
#define PI acos(-1.0)
#define ll __int64
#define lson l,m,(rt<<1)
#define rson m+1,r,(rt<<1)|1
//#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std;

/*
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
*/
ll Cal(ll k) //计算k的位数
{
   ll res=0;
   while(k)
   {
      res++;
      k/=10;
   }
   return res;
}
ll cnt[33000]; //cnt[i]表示S1S2...Si的总位数
ll bitcnt[20]; //在一个Si中,bitcnt[i]表示1~i位总共的个数
ll shi[12]; //shi[i]表示10^(i-1);

int fun(int x,int num) //计算x的第num位数字
{
   int res=0,temp=x;
   while(temp)
   {
      res++;
      temp/=10;
   }
   res=res-num+1;
   for(int i=1;i<res;i++)
      x/=10;
   return x%10;
}
int main()
{
   ll lim=2147483647LL; //打表预处理
   cnt[1]=1;
   ll la=1;
   for(int k=2;cnt[k-1]<=lim;k++)
   {
      la=la+Cal(k); // Sk=S(k-1)+k的位数
      cnt[k]=cnt[k-1]+la;
   }
   int up=31268; //计算知k最大为31268

   bitcnt[1]=9;
   la=1;
   for(int i=2;i<10;i++) //计算1~i位总的个数 1 有9个 2位有90个 3位有900个
   {
      la*=10;
      bitcnt[i]=bitcnt[i-1]+la*9*i;
   }
   shi[1]=1;
   for(int i=2;i<=10;i++)
      shi[i]=shi[i-1]*10;

   ll n;
   int t;
   scanf("%d",&t);
   while(t--)
   {
       scanf("%I64d",&n);
       int k=lower_bound(cnt+1,cnt+up+1,n)-cnt; //求出是属于第k个数中
       int gap=n-cnt[k-1]; //中间差多少位
       int bb=lower_bound(bitcnt+1,bitcnt+9+1,gap)-bitcnt;//算出数位
       gap-=bitcnt[bb-1];//算出是该数位的第几个数
       int a=(gap%bb)?(gap/bb+1):(gap/bb); //表示第几个
       int b=gap%bb; //表示是该数的第几位
       if(b==0)
           b+=bb;
       printf("%d\n",fun(shi[bb]-1+a,b));
   }
   return 0;
}




YOLOv11改进策略【损失函数篇】| Shape-IoU:考虑边界框形状和尺度的更精确度量 本文记录的是改进YOLOv11的损失函数,将其替换成Shape-IoU。现有边界框回归方法通常考虑与之间的几何关系,通过边界框的相对位置和形状计算损失,但忽略了边界框本身的形状和尺度等固有属性对边界框回归的影响。为了弥补现有研究的不足,Shape-IoU提出了一种关注边界框本身形状和尺度的边界框回归方法。 阅读详情

相关推荐

杰理蓝牙AC696X开发实战:自定义蓝牙名称与提示音配置指南

本文详细介绍了杰理AC696X蓝牙芯片开发中自定义蓝牙名称与提示音配置的完整实战指南。文章从SDK工具定位入手,逐步讲解如何通过配置工具修改蓝牙名称,并重点阐述了替换提示音的正确步骤与音频文件(如WAV格式、16kHz采样率)的详细参数要求,最后指导如何生成并验证最终固件,帮助开发者快速实现个性化设备定制。

weixin_29161719的博客 561

POJ 1019 Number Sequence (二分查找+暴力打表)

题意:把数字1,12,123,1234,12345,,,,连起来,问第k个数字是多少,原以为最大的数会很大,看了discuss之后发现才30000多点,直接暴力到100000。 #include #include #include #include #include #include #include #include #include #define LL long long

binwin20 1080

Python气象数据处理实战:用PyCINRAD轻松绘制雷达PPI图像(附避坑指南)

本文详细介绍了如何使用Python库PyCINRAD处理中国CINRAD系列天气雷达的基数据,并绘制专业的PPI图像。内容涵盖从环境配置、数据读取、核心绘图到高级定制与批量处理的完整流程,并针对安装依赖、中文乱码、数据范围等常见问题提供了实用的避坑指南,帮助气象工作者高效完成雷达数据可视化。

dog123的博客 223

POJ-1019 Number Sequence 二分查找

这题只需要预处理两个数组就可以了,那就是一个保留从1到N,这个N个数字连在一起的长度,以及另外一个数组表示重复打印112123...123..N的这样一个打印到N的串的长度。接下来进行两次二分查找便可得到答案了。 代码如下: #include &lt;cstring&gt; #include &lt;cstdlib&gt; #include &lt;cstdio&gt; #defin...

weixin_33851177的博客 190

FastAPI + LLM 实战:5分钟搞定本地模型API服务部署(含避坑指南)

本文详细介绍了如何使用FastAPI和LLM(大语言模型)快速部署本地API服务,涵盖环境准备、模型集成、性能优化及避坑指南。通过实战示例,帮助开发者在5分钟内完成从零到生产的部署过程,提升AI应用开发效率。

weixin_29062963的博客 105

TensorFlow GPU版本安装步骤-Windows系统

本文由在Windows下安装TensorFlow GPU版本教程-优快云等整理得到。 目录 1、确认显卡是否支持CUDA 1.1 查看显卡信息 打开“设备管理器”,查看显卡信息,如下图所示: 由上图知,本电脑的显卡为NVIDIA Quadro P400. 1.2 查看支持CUDA的显卡 网址:https://developer.nvidia.com/cuda-gpus 经查询可知,该显卡支持CUDA,如下图所示: 2、安装CUDA 2.1 下载CUDA 网址:https://developer.nvi

x_lingyun的专栏 766

POJ_1019_Number Sequence_二分搜索

晚上还得上课哦凑

_Aka 470

TI 实时操作系统SYS/BIOS使用总结

1:概述: SYS/BIOS 是一个可扩展的实时的操作系统。具有非常快速的响应时间(在中断和任务切换时达到较短的延迟),响应时间的确定性,强壮的抢占系统,优化的内存分配和堆栈管理(尽量少的消耗和碎片)。能够实现系统的模块化并可裁剪。 最大的特点就是:实时。 2:XDCtools: XDCtools 是SYS/BIOS引用的一种实时的软件组件技术(RTSC),它包括一些有用的工具,标准的AP

带头奋青的博客 5万+

POJ 1019:Number Sequence 二分查找

Number Sequence Time Limit:1000MS Memory Limit:10000K Total Submissions:36013 Accepted:10409 Description A single positive integer i is given. Write a p...

weixin_33898876的博客 310

SpringBoot+Vue前后端分离项目实战:个人博客系统

MyBlog主要是基于 SpringBoot + Vue 前后端分离开发的一款动态个人博客系统,后台和前台均通过JSON数据做交互,主要功能有文章管理、分类管理、标签管理、附件管理、评论管理、友链管理、个人资料/博客信息管理等。

Myles'Blog 1万+

前导0预测(Leading-Zero Anticipator,LZA)

前导0预测(Leading-Zero Anticipator,LZA) 浮点加法在完成之后会进行尾数规格化移位,而在进行尾数加法时,可以使用前导0预测(Leading-Zero Anticipator,LZA)同时计算移位,前导0预测只发生在一个正数加上一个负数的情况下,电路图如图1所示。 图1 传统LZD算法和LZA算法 1. 基础算法 算法的目标是计算出加法结果序列左边连续0的数量,下文中对...

crw1111111的博客 7381

【二分查找答案】Distinct

Daniel 正在玩一个战棋游戏。 现在 Daniel 有 n 队士兵站在 x 轴上。第 i 队士兵有 ai 人,坐标为 xi。 Daniel 看到一队士兵有这么多人,都站在同一个位置,他对此很不满意。他 想命令一些士兵移动到新的位置(必须是整点),使得不存在两个士兵站在同一个 位置。 为了节约时间,Daniel 希望每个士兵的移动距离的最大值尽可能小。请求出 这个最小值。 Input 第一行一个...

鲤の游 297

【数字孪生工业应用实战】第2篇:数字孪生系统架构设计与技术选型——从“作秀”到“实干”的骨架构建

本文系统剖析了数字孪生系统从“作秀”到“实干”的架构设计关键。针对多数项目在POC转生产时因架构混乱、选型盲目而失败的问题,深入阐述了四层分层架构(感知层、传输层、模型层、应用层)的设计原则,重点解析了感知层的异构适配与边缘预处理、传输层的异步解耦与多模式通信等工程细节。结合OPC UA、MQTT、EdgeX Foundry等主流技术选型对比,以及汽车焊装车间边缘智能网关的实战代码,提供了从零搭建微型孪生系统的完整指导。旨在帮助工程师建立清晰的选型决策逻辑,构建稳定、可演进的数字孪生“骨架”。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 267

poj 1019 Number Sequence && hdu 1597 find the nth digit(二分,模拟)

两个题很相似,都是问你第i位是几,但排列的顺序有点不太一样. hdu 1597的每个单位是前一个单位后加个1-9中的一个循环添加; poj 1019的每个单位是前一个单位后加(i+1) 思路都一样,想办法记录截止到某个单位其前缀一个有几位,这样就可以二分快速找出第i位在哪个单位,剩下的就好办了。poj的比较难想,需要记录

CillyB的博客 519

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

POJ 1019 Number Sequence

题目:http://poj.org/problem?id=1019 解:   预处理出$cnt(i)$为$S_i$的长度,$S(i)$为$cnt(i)$的前缀和,这样的话,对于一个坐标n,得到一个长度为n的字符串,我们可以将之分为$S_1,S_2....S_{k-1}$和不一定完整的$S_k$。二分$S(i)$用$n$减去相应的$S(t)$得到不完整的串$S_k$的长度   接下来将$S_k...

weixin_30394251的博客 148

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Number Sequence(POJ--1019

Description A single positive integer i is given. Write a program to find the digit located in the position i in the sequence of number groups S1S2...Sk. Each group Sk consists of a sequence of pos

zhang_di233的专栏 472

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

poj 1019 Number Sequence

题意:[1,i]表示从1到i的数列出来的数列,比如[1,3]是123。现在将[1,i]按顺序列出来,问第n位的数字是什么。 思路:我直接模拟的?大概就是把[1,i]作为一组,然后不断减去这一组的长度。然后找到n是在哪个[1,i]中,然后再去里面找。。。看了看网上的代码,貌似没有我这么简单粗暴的,一般都弄了些预处理,还有二分的。。。 代码: #include #include #inc

绝望的乐园 632

poj 1019 二分

sum记录从1到1 12 123 。。。123...i 的总位数 然后用二分搜k是在1到几的序列中然后再遍历一遍就行 AC代码如下: #include #include #include #include #include using namespace std; long long sum[50000]; int init_sum(){ long long pre = 1;

马德里小铁匠的铁匠铺 756

POJ 1019 许久之前,觉得这真是一道神题呢。。 递推+二分

11212312341234512345612345671234567812345678912345678910123456789101112345678910 给出一串有以上规律的数字,找出第 n 个位置上的数字是几。 我们把这串字符串分一下 dp[i] 代表从 1 开始 结尾为 i 的子串的长度 sum[i] 代表从 1 开始到 i 子串长度的总和。 这样,我们首先确定这是到哪一个子

用心一也 692

//二分查找//Number Sequence------二O

A single positive integer i is given. Write a program to find the digit located in the position i in the sequence of number groups S1S2…Sk. Each group Sk consists of a sequence of positive integer numb

lydia_ke的博客 577

[C++学习笔记]--友元、this指针

友元函数:一个类的友元函数可以访问该类的私有成员。在声明的时候加friend关键词      友元类:A是B的友元类——>A的成员函数可以访问B的私有成员     class CCar{           private:                     int price;                    friend class CDriver;//声明CDriver

dp_huang的博客 687

poj 1019

二分,模拟。 #include <iostream> #include <cstdio> #include <iomanip> #include <string> #include <cstdlib> #include <cstring> #include <queue> #include <set> ...

Fawkess的博客 196

【二分】Distinct

题目描述 Daniel 正在玩一个战棋游戏。 现在 Daniel 有 n 队士兵站在 x 轴上。第 i 队士兵有 ai 人,坐标为 xi。 Daniel 看到一队士兵有这么多人,都站在同一个位置,他对此很不满意。他 想命令一些士兵移动到新的位置(必须是整点),使得不存在两个士兵站在同一个 位置。 为了节约时间,Daniel 希望每个士兵的移动距离的最大值尽可能小。请求出 这个最小值。 输入 第一行...

Maple的博客 316
上一篇: dp hdu-4433 locker
下一篇: dp+计数 poj-1037-A decorative fence
Accagain
博客等级 码龄14年 376粉丝 316原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值