UVa 12505 Searching in sqrt(n)
题目描述给定一个整数nnn2≤n≤1062 \le n \le 10^62≤n≤106和一个二进制字符串SSS长度不超过202020需要在n\sqrt{n}n​的二进制表示的小数部分中找到SSS第一次出现的位置。小数部分第一位的位置为000。答案保证不超过100100100。若n\sqrt{n}n​为整数则小数部分为无限个000。输入格式第一行包含一个整数TTTT≤100T \le 100T≤100表示测试用例的数量。接下来TTT行每行包含一个整数nnn和一个二进制字符串SSS。输出格式对于每个测试用例输出一行一个整数表示SSS在n\sqrt{n}n​二进制小数部分第一次出现的位置。样例输入2 2 101 1202 110011输出2 58题目分析本题的核心是计算n\sqrt{n}n​的二进制小数表示并在其中查找子串SSS。一个直观的思路是先计算n\sqrt{n}n​的十进制小数再转换为二进制。但十进制转二进制需要高精度运算且题目中nnn最大为10610^6106答案位置不超过100100100这意味着我们只需要计算前120120120位左右的二进制小数即可。直接使用浮点数如double计算会因精度不足而失败因为120120120位二进制小数对应的精度要求远超double的535353位有效数字。因此必须使用高精度整数运算来模拟开平方过程。解题思路手工开平方的原理手工开平方竖式开平方是一种逐位确定平方根的方法。对于十进制每次确定一位小数对于二进制同样适用。本题可以采用二进制直接开平方的思路避免十进制与二进制之间的转换。二进制手工开平方的数学基础设当前已经确定的平方根为yyy二进制表示余数为rn−y2r n - y^2rn−y2。要确定下一位二进制小数b∈{0,1}b \in \{0, 1\}b∈{0,1}我们需要判断(yb2k1)2≤n \left(y \frac{b}{2^{k1}}\right)^2 \le n(y2k1b​)2≤n其中kkk是已确定的小数位数。将不等式两边乘以22k22^{2k2}22k2得到(2yb)2≤n⋅4⋅22k (2y b)^2 \le n \cdot 4 \cdot 2^{2k}(2yb)2≤n⋅4⋅22k在实现中我们可以每确定一位就将nnn左移222位相当于乘以444将yyy左移111位然后尝试将最低位设为111计算其平方并与nnn比较。算法流程计算整数部分使用sqrt(n)得到整数部分r⌊n⌋r \lfloor \sqrt{n} \rfloorr⌊n​⌋并转为二进制字符串rb。处理完全平方数若r2nr^2 nr2n则n\sqrt{n}n​为整数小数部分全为000。直接判断SSS是否全为0并输出000题目保证有解此处直接输出000即可。初始化将nnn转为二进制字符串nb小数部分字符串fb初始为空。逐位确定小数循环120120120次足够覆盖答案范围将nb末尾添加00相当于左移222位。构造候选根rb fb 1。计算候选根的平方高精度二进制乘法。若nb不小于该平方则当前小数位为111否则为000。将确定的位追加到fb末尾。查找子串在fb中查找SSS第一次出现的位置输出结果。高精度运算的实现由于二进制数字的位数最多约120120120位平方后的位数约为240240240位完全可以在string上手动模拟二进制运算比较先比较长度长度相同则按字典序比较。平方模拟二进制竖式乘法使用vectorint暂存中间结果最后转换为string。复杂度分析每个测试用例需要计算120120120位小数。每次迭代需要进行一次二进制平方运算复杂度为O(L2)O(L^2)O(L2)其中LLL为当前二进制数的长度约O(120)O(120)O(120)。总时间复杂度O(T⋅120⋅1202)O(T⋅1.7×106)O(T \cdot 120 \cdot 120^2) O(T \cdot 1.7 \times 10^6)O(T⋅120⋅1202)O(T⋅1.7×106)对于T≤100T \le 100T≤100完全可行。空间复杂度O(L)O(L)O(L)用于存储二进制字符串。代码实现// Searching in sqrt(n)// UVa ID: 12505// Verdict: Accepted// Submission Date: 2026-06-14// UVa Run Time: 0.100s//// 版权所有C2026邱秋。metaphysis # yeah dot net#includebits/stdc.husingnamespacestd;boolge(conststringa,conststringb){if(a.length()!b.length())returna.length()b.length();returnab;}stringsquare(conststringa){vectorintr(2*a.length(),0);for(intia.length()-1;i0;i--)for(intja.length()-1;j0;j--){intp(a[i]-0)*(a[j]-0);r[ij1]p;r[ij]r[ij1]1;r[ij1]1;}string s;boolleadtrue;for(intv:r){if(leadv0)continue;leadfalse;schar(v0);}returns.empty()?0:s;}stringbinary(intn){if(n0)return0;string s;while(n){schar((n1)0);n1;}reverse(s.begin(),s.end());returns;}intmain(){intT;cinT;while(T--){intn;string S;cinnS;intr(int)sqrt(n);if(r*rn){cout0\n;continue;}string rbbinary(r),nbbinary(n),fb;for(inti0;i120;i){nb00;if(ge(nb,square(rbfb1)))fb1;elsefb0;}cout(int)fb.find(S)\n;}return0;}总结本题的核心技巧是二进制手工开平方通过高精度整数运算逐位确定平方根的小数部分。关键点如下避免浮点数使用高精度整数模拟二进制运算完全避免精度问题。平方运算的优化只实现平方而非通用乘法简化代码。逐位构造候选根每次尝试将当前根最低位设为111判断其平方是否超过nnn的放大版本。处理完全平方数直接输出000符合题目保证。这种方法不仅适用于本题还可推广到任意精度的平方根计算场景是学习高精度算法的一个良好范例。

相关新闻

2026年HDMI矩阵厂商怎么选?业内可靠品牌大盘点

2026年HDMI矩阵厂商怎么选?业内可靠品牌大盘点

会议室投屏黑屏、报告厅信号掐断、指挥中心画面撕裂——这些问题背后的元凶,往往不是显示设备,而是藏在机柜里的HDMI矩阵。过去几年,我们走访了大量项目现场,发现一个规律:信号问题高发的项目中,80%都使用了…

2026/8/12 20:29:34 阅读更多 →
2026年专业HDMI矩阵制造商怎么选?认准这几点不踩坑

2026年专业HDMI矩阵制造商怎么选?认准这几点不踩坑

作为弱电项目老兵,我今年刚交付完一个涉及 32 个信号源、8 块拼接屏的会议室改造项目。在选 HDMI 矩阵时,差点被某电商平台的"低价爆款"坑到返工。今天不聊虚的,直接结合我跑过的工地经验和真实参数,聊聊 2026 年选专业…

2026/8/12 20:29:34 阅读更多 →
YARN Capacity Scheduler:多租户Hadoop集群资源调度实战指南

YARN Capacity Scheduler:多租户Hadoop集群资源调度实战指南

1. 从资源管理的混乱到有序:为什么需要容量调度器如果你负责过公司的大数据集群,或者尝试过在共享的Hadoop集群上跑过多个任务,那你大概率经历过这样的场景:一个部门提交了一个巨型的Spark SQL分析作业,瞬间吃光了集群…

2026/8/12 20:29:34 阅读更多 →

最新新闻

Vue 2到Vue 3升级实战:从评估、迁移到验证的全流程指南

Vue 2到Vue 3升级实战:从评估、迁移到验证的全流程指南

1. 从Vue 2.9.6到Vue 3.0:一次深思熟虑的“大迁徙” 如果你手头维护着一个基于Vue 2.9.6的老项目,最近可能被Vue 3.0的各种新特性、更好的性能以及活跃的生态撩拨得心痒痒。从“听说”到“动手”,这中间隔着的不是一次简单的 npm update vue…

2026/8/12 21:19:04 阅读更多 →
Pandas read_excel()函数全解析:从Excel数据导入到DataFrame处理实战

Pandas read_excel()函数全解析:从Excel数据导入到DataFrame处理实战

1. 项目概述:为什么Pandas的read_excel()是数据处理的第一道工序如果你经常和数据打交道,尤其是那些躺在Excel表格里的数据,那你对pandas.read_excel()这个函数一定不陌生。它几乎是所有Python数据分析、自动化办公脚本的起点,就像…

2026/8/12 21:19:04 阅读更多 →
SAP Gateway服务注册机制与OData路由实战解析

SAP Gateway服务注册机制与OData路由实战解析

1. SAP Gateway服务注册机制深度解析 第一次接触SAP Gateway的Service Registration功能时,我像大多数开发者一样被各种专业术语绕得晕头转向。直到在某个跨国项目中被紧急叫去解决服务路由故障,才真正理解这个看似简单的"服务注册"背后隐藏着…

2026/8/12 21:19:04 阅读更多 →
AI编程助手工具调用机制解析:从Claude Code实践看大模型与外部系统集成

AI编程助手工具调用机制解析:从Claude Code实践看大模型与外部系统集成

1. 从一次失败的代码生成说起:为什么“聪明”的模型会“犯傻”? 最近在深度使用 Claude Code 进行项目开发时,我遇到了一个让我停下来思考的场景。我需要它帮我生成一个函数,这个函数的核心逻辑是:给定一个用户ID列表&…

2026/8/12 21:19:04 阅读更多 →
MySQL数据库实训:从SQL语法到JDBC连接池的实战避坑指南

MySQL数据库实训:从SQL语法到JDBC连接池的实战避坑指南

1. 从“找答案”到“学方法”:我的MySQL数据库学习心路 最近在技术社区和论坛里,经常看到有同学在搜索“头歌MySQL数据库实训答案”,希望能找到一份现成的、带目录的“标准答案”。作为一个在数据库领域摸爬滚打了十多年的老手,我…

2026/8/12 21:19:04 阅读更多 →
终极指南:如何免费快速转换网易云音乐NCM格式到MP3

终极指南:如何免费快速转换网易云音乐NCM格式到MP3

终极指南:如何免费快速转换网易云音乐NCM格式到MP3 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式无法在其他设备播放而烦恼吗?ncmdump作为一款专业的开源工具,能够…

2026/8/12 21:18:03 阅读更多 →

日新闻

Ubuntu 22.04安装与使用tree命令:高效管理Linux目录结构

Ubuntu 22.04安装与使用tree命令:高效管理Linux目录结构

1. 为什么需要一个“目录树”工具?在Linux世界里,尤其是Ubuntu这样的发行版,命令行是很多人的主战场。我们每天都要和文件、目录打交道。ls命令是查看目录内容的首选,它简洁、高效,能列出文件名、权限、大小等关键信息…

2026/8/12 9:33:34 阅读更多 →
博思AI智能体:意图识别、思考链与性能优化的工程实践

博思AI智能体:意图识别、思考链与性能优化的工程实践

在AI应用从“能用”走向“好用”的进程中,系统的响应速度、决策透明度与高并发稳定性是决定用户体验的关键。博思AI智能体近期完成了一次重要的专项优化,聚焦于意图识别、思考链展示与全链路压测三大核心领域,将系统从功能实现推向了工程卓越…

2026/8/12 9:33:34 阅读更多 →
子代理架构:AI智能体任务分解与协同执行的核心原理与实践

子代理架构:AI智能体任务分解与协同执行的核心原理与实践

1. 项目概述:为什么我们需要“子代理”?最近在折腾各种AI应用和自动化流程时,我越来越频繁地遇到一个瓶颈:单个AI智能体(Agent)的能力边界。无论是处理复杂的多步骤任务,还是需要同时调用多个专…

2026/8/12 9:33:34 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/12 1:11:09 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/12 1:11:09 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/12 1:11:08 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/11 17:09:45 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/12 1:11:10 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/11 17:09:45 阅读更多 →