[NOIP1999 普及组] Cantor 表

news2024/12/24 8:41:30

[NOIP1999 普及组] Cantor 表

题目描述:

现代数学的著名证明之一是 Georg Cantor 证明了有理数是可枚举的。他是用下面这一张表来证明这一命题的:

1/1 ,   1/2 ,   1/3 ,   1/4,   1/5,   …

2/1,   2/2 ,   2/3,    2/4,    …

3/1 ,   3/2,    3/3,    …

4/1,    4/2,    …

5/1,   …

我们以 Z 字形给上表的每一项编号。第一项是 1/1,然后是 1/2,2/1,3/1,2/2,…

输入格式:

整数N(1 <= N <= 10^7)。

输出格式:

表中的第 N 项。

样例 #1:

样例输入 #1:

7

样例输出 #1

1/4

思路:

算法1:模拟

模拟,按题意一个个枚举

时间复杂度O(n),可以通过本题n≤10^7.

算法2:枚举

  发现Z字形的每条斜线可以快速枚举,即枚举

  1/1 , 1/2 , 3/1 , 1/4 , 5/1 , 1/6……找到要求的第n项所在斜线,再一个个枚举或计算得出答案

  时间复杂度O(√n),可以通过n≤10^14

算法2.2:枚举简化

  枚举第n项在哪一行,计算得出答案,比算法2好写,

  时间复杂度同算法2

算法3:二分

  发现第i条斜线(即分子分母之和=i+1的所有项)中包含i*(i-1)/2+1至i*(i+1)中的每一项,所以可以二分分子分母之和,再根据分子分母之和的奇偶性直接计算第n项

  时间复杂度O(㏒₂n),可以通过n≤10^18,加上高精可通过n≤10^1000

二分算法代码:

#include<iostream>
#include<cmath>
using namespace std;
int main(){
    long long l=1,r,mid,n,a;
    cin>>n;
    r=n;
    while(l<r){
        mid=(l+r)/2;
        if(mid*(mid+1)/2<n)
		  l=mid+1;
        else 
		  r=mid;
    }
    a=n-l*(l-1)/2;
    if(l%2==0)
	  cout<<a<<'/'<<l+1-a;
    else 
	  cout<<l+1-a<<'/'<<a;
    return 0;
}

当然,最简单的还是“数学”直接推,O(1)复杂度直接起飞,所以我们直接来推一下吧!

算法4:数学直接推

已知数据是求第个。

明显Z形画出来的三角,从左上到右下的行数是从1开始公差为1的等差数列。所以利用求和公式,设行数的话则有:

因此我们 设使得 

根据建立起的函数的递增性,可知

所以通过求根公式求出然后向上取整就可以在O(1)的时间复杂度求出行数了。

Which is 

接下来,还要求出所在当行的具体位置,这个就很容易了,只需要知道 到那一行总共有多少个:明显

所以要求的也就是那一行的第个。

接下来是一个对于知道行数+第几个的Cantor形式求法:

对于第a行,中所有个体,都有(“/”左边)+(“/”右边)

同时 

输出的结果应该是:

<u>(_第几个_ )/(a+1- _第几个_ )</u>

<u>而剩下的则“/”两边相反即好。</u>

以上就是O(1)(其实应该没比二分快多少,相当于让系统做了三分而已)解决此题的详解。既然是数学推算,代码就不贴了,没啥意思。 

总结:

  该题题目很简单,可以用非常简单的算法解决,但是我们可以举一反三,更加深入的思考,想到更牛X,更高效快速的算法。

题目链接:
[NOIP1999 普及组] Cantor 表 - 洛谷https://www.luogu.com.cn/problem/P1014

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/432558.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

win11下载配置Python环境+pycharm下载

前两天快乐的把我重装的win10升级成win11&#xff0c;升级的时候超怕不能成功&#xff0c;但效果还不错&#xff0c;然后突然想学一学Python&#xff0c;所以首先来配置环境吧 一、下载安装包 建议去官网&#xff0c;因为自从有了Python3之后&#xff0c;Python2就慢慢的被淘汰…

测试市场已经饱和了吗?现在转行软件测试会不会太迟?

非常有意思的话题&#xff0c;某种程度上来说&#xff0c;测试职场一条从未设想过的道路真的走通了。 这条路指广大测试呼吁对测试从业进行学历保护、专业保护&#xff0c;就像医学那样设置护城河&#xff0c;以一种令人意想不到的方式完成了。 得益于大量培训机构为了赚钱&a…

R语言地理加权回归、主成份分析、判别分析等空间异质性数据分析

在自然和社会科学领域有大量与地理或空间有关的数据&#xff0c;这一类数据一般具有严重的空间异质性&#xff0c;而通常的统计学方法并不能处理空间异质性&#xff0c;因而对此类型的数据无能为力。以地理加权回归为基础的一系列方法&#xff1a;经典地理加权回归&#xff0c;…

有趣的Hack-A-Sat黑掉卫星挑战赛——被破坏的阿波罗计算机(解法二)

国家太空安全是国家安全在空间领域的表现。随着太空技术在政治、经济、军事、文化等各个领域的应用不断增加&#xff0c;太空已经成为国家赖以生存与发展的命脉之一&#xff0c;凝聚着巨大的国家利益&#xff0c;太空安全的重要性日益凸显[1]。而在信息化时代&#xff0c;太空安…

全网最火爆,Web自动化测试POM模式分层实战,框架封装看这一篇就够了

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 线性脚本以快递 100…

【可信平台】SO202303191426,销售订单未同步,销售出库单未同步

1.销售订单未同步 这里先说下推送逻辑:1.物料描述带有‘再生’ 。2.公司是芮邦 这个物料应该在EOS里查,可我不会,我在MES里查,的确符合条件。 可信平台同步逻辑,是销售订单同步了,才会同步销售出库单。 这个SO销售订单就没同步,要先解决这个问题。 可以在接口看日志…

HighTec编译器错误记录

目录 1、HighTec安装后缺少Universal Debug Engine 2、HighTec工程改名后不能跳转函数定义&#xff0c;提示找不到定义。 3、HighTec工程重复编译 1、HighTec安装后缺少Universal Debug Engine 在HighTec安装后&#xff0c;没有调试UDE&#xff0c;重装系统后还是没有&#x…

STM32F4_OLED显示

目录 1. OLED简介 2. 硬件模块 3. 8080并行接口 4. SPI方式 5. SSD1306常用命令表 6. 完整源码 (STM32F407对应的源码) 6.1 oled.c 6.2 oled.h 6.3 oledfont.h 7. IIC接口下的OLED(STM32F407搭配4Pin OLED) 7.1 OLED.c 7.2 OLED.h 7.3 OLED_Font.h 7.4 MyI2C.c …

QTableview 隐藏单元格内控件无效的原因

QTableview 隐藏单元格内控件无效的原因 背景&#xff1a; 在QTableview的单元格中创建多个QComboBox&#xff0c;当某条件成立时&#xff0c;隐藏特定单元格中的QComboBox&#xff0c;使得该单元格为空。 DEMO&#xff1a; #ifndef MAINWINDOW_H #define MAINWINDOW_H#inc…

【Redis】Redis键(key)

常用命令 常用案例 keys * 查看当前库所有的key 127.0.0.1:6379> keys * 1) "k1"exists key 判断某个key是否存在&#xff0c;存在几个则返回几&#xff0c;不存在则返回0 127.0.0.1:6379> exists k1 (integer) 1 127.0.0.1:6379> exists k2 (integer)…

西工大电子实习单片机-7+1亮灯编程C语言代码分享

电子实习是西工大大多数学生绕不开的一门实习课程。单片机是电子实习课程中较为重要的一部分&#xff0c;需要上两次。我们在单片机编程时在西工大电脑机房老系统上往往由于大一学习的C语言忘得一干二净而无从下手。流水灯成了流水账。 废话不多说&#xff0c;仅供参考。71是指…

分享5款办公效率工具|让你早点下班

如果每天你的工作都很多&#xff0c;做不完需要加班怎么办? 不知道你会不会加班&#xff0c;但是我肯定不会&#xff0c;因为我知道哪些高效率的办公工具&#xff0c;可以帮助我早点下班&#xff0c;今天来给大家分享一下。 1.FlowUs FlowUs 是一款为个人和团队打造的新一代生…

Netty通信技术进阶二

Netty核心组件 1. Bootstrap2 Channel3. EventLoopGroup 和 EventLoop3.1 eventLoopThreads 是多少&#xff1f; 4. ChannelHandler & ChannelHandlerContext & ChannelPipeline4.1 复用Handler4.2 ChannelInboundHandlerAdapter or SimpleChannelInboundHandler 5. By…

Linux系统之部署ZFile在线网盘服务

Linux系统之部署ZFile在线网盘服务 一、ZFile介绍1.ZFile简介2.ZFile特点 二、本地环境介绍1.本次实践说明2.本地环境规划 三、安装环境依赖1.安装java2.检查java版本 四、下载ZFile软件1.创建安装部署目录2.声明安装路径3.下载ZFile软件包4.解压ZFile软件包5.授权启动停止脚本…

FOC专题--环路PID算法拆分分析

foc中&#xff0c;其实foc算法并不是最难理解的&#xff0c;反而是在其中使用的PID算法&#xff0c;之前我只会套用别人的代码&#xff0c;但并不理解其中的各参数含义&#xff0c;导致在实际调整PI参数的时候&#xff0c;很难调到合适的值。 在实际理解什么是PID算法以及各参数…

【C++引用 】

目录 前言一、引用的概念二、使用引用时注意事项三、引用的使用场景及优势四、常引用、引用的权限五、引用和指针的区别 前言 相信大家应该在网上看过这样的段子。 大家都知道鲁迅原名周树人&#xff0c;浙江绍兴人。"鲁迅"是"周树人"的别名或者说是笔名…

TCP版本的 echo server 和 echo client

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言Tcp的api展示服务端客户端存在的问题解决问题服务端和客户端的大致流程 前言 上一篇文章我们介绍了UCP的客户端与服务器的一个简单实例,这篇我们简单的来介绍T…

111.【金橘社区1.0】

金橘社区1.0版本 (一)、SpringBoot整合SpringSecurity1.导入依赖2.数据库3.登入表单4. 添加配置类 SecurityConfig5.接口实现类 CkqnUserServiceImpl6.前端认证问题 (二)、SpringBoot整合Ajax1.登入表单2. JavaScript (三)、SpringBoot整合editor.md1.编写页面(1).前端页面(2).…

Windows安装RedisJSON(无需编译)

文章目录 Windows安装RedisJSON下载解压配置文件启动服务启动客户端 Windows安装RedisJSON 下载 打开网址 https://github.com/zkteco-home/RedisJson。 在网页的右上角&#xff0c;点击“Code”按钮&#xff0c;然后选择“Download ZIP”以下载最新版本的RedisJSON。 网盘 …

C6678-控制GPIO输入/输出

C6678-控制GPIO输入/输出 术语寄存器起始地址原理输入输出测试中断功能原理中断原理框图芯片中断控制器原理框图内核中断控制器原理框图中断路由架构一级中断表二级中断表CIC0二级中断CIC1二级中断CIC2二级中断CIC3 中断演示代码参考资料 术语 NMI&#xff1a; 不可屏蔽中断CI…