P1014 [NOIP1999 普及组] Cantor 表

2023-05-16

[NOIP1999 普及组] Cantor 表

题目描述

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

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

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

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

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

5 / 1 5/1 5/1, …

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

输入格式

整数 N N N 1 ≤ N ≤ 1 0 7 1 \leq N \leq 10^7 1N107)。

输出格式

表中的第 N N N 项。

样例 #1

样例输入 #1

7

样例输出 #1

1/4

解题思路

这道题数据很大,如果直接按照题目要求去构造数组肯定超时。
在这里插入图片描述
按照上图我们发现,按照红线可以将数据分为好多“排”。那么每一排的数据比之前多一个,也就是前r排的数据个数为 ( r + 1 ) ∗ ( r ) / 2 (r+1)*(r)/2 (r+1)(r)/2那么对于编号为n的数据,我们可以找到这个数据在第几排。然后找到算出这个编号为n的数据距离当前“行”r的第一行数据的距离。我们观察发现第一行的数据的y的值总是1,x的值总是排数r,所以可以很轻松根据第n个数据与当前排的第一行的数据的距离来算出x和y的值。由于成z字形排列,所以我们需要分单双排来计算。

  • 偶数排的数据与当前排的第一行的数据的距离为 n − ( r − 1 ) ∗ r / 2 n-(r-1)*r/2 n(r1)r/2
  • 奇数排的数据与当前排的第一行的数据的距离为 ( r + 1 ) ∗ r / 2 − n (r+1)*r/2-n (r+1)r/2n

代码如下

#include<iostream>
#include<algorithm>
#include<vector>
using  namespace std;

int main(){

		
	int n;
	cin>>n;
	int row=0;
	while(row*(row+1)/2 <n)
		row++;
		
	int y;
	
	if(row%2==1){
	
		y=row*(row+1)/2-n+1;
	}else{
		
		y=n-(row-1)*row/2;
	}
	int x=row+1-y;
	
	cout<<y<<"/"<<x<<endl;


		 
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

P1014 [NOIP1999 普及组] Cantor 表 的相关文章

  • Linux学习笔记

    Linux linux的本质是一切皆目录 学习来自哔哩哔哩狂神说 xff0c 视频地址https www bilibili com video BV187411y7hF hostnamectl xff1a 查看linux信息 关机 shut
  • Linux .deb包的安装(gdebi)

    一些废话 deb包可以通过传统的dpkg命令来实现 xff0c 但过程中经常会遇到一些问题 所以有个软件叫GDebi xff0c 可以更加有效的帮助安装deb 通过点击deb包即可实现安装 xff0c 当然 xff0c 也可以通过命令行模式
  • 简单的理解EKF算法1

    简单的理解EKF算法 经典的EKF公式简化版的EKF公式参考资料 经典的EKF公式 来我们先来看一下第一眼看上去不知道在讲啥的公式 1 x k 61 A
  • Myeclipse/Eclipse 如何停止死循环进程

    今天在在练习hibernate 对象导航查询的时候想输出一对多 xff08 客户1 联系人n xff09 关系里面想输出某个客户的所有联系人 xff0c 便用Iterator对set进行遍历 xff0c 顺便看看iterator里面的方法具
  • 如何快速解决zookeeper闪退问题!

    有以下2种情况 xff1a 第一种方法 xff1a 按任意键直接闪退 xff0c 这时我们只需要修改一下配置文件即可 xff0c 右键 zkServer cmd xff0c 编辑文件内容 xff0c 在末尾输入 pause 保存并退出 在双
  • Centos6.8更新yum

    一 重新安装 1 卸载yum CentOS6停止维护更新日期2020年11月30日 下架了包括官方所有的CentOS6源 xff08 包括国内的镜像站 xff09 span class token comment 查看yum span rp
  • Debian 10系统最小化安装

    Debian 10最小化安装 一 Debian系统介绍 广义的Debian是指一个致力于创建自由操作系统的合作组织及其作品 xff0c 由于Debian项目众多内核分支中以Linux宏内核为主 xff0c 而且 Debian开发者 所创建的
  • 在Ubuntu16.04系统下安装Python3.6 + pip3 的完整步骤

    python gt 垃圾垃圾真垃圾 xff08 开玩笑的 xff09 Ubuntu16 04版本最新的Python 3 x为版本3 5 1 要安装Python 3 6 xff0c 请运行以下命令 xff1a wget https www p
  • Ubuntu中的中文字体设置

    首先我们要搞清楚我们要设置的是系统的字体还是Firefox中的字体 一 设置的是Firefox浏览器中的字体 我们只需要在点击浏览器右上角Open menu gt Preferences gt Content gt Fonts amp Co
  • 详解叠瓦式磁记录SMR盘基础知识

    SMR Shingled Magnetic Recording 叠瓦式磁记录盘 是一种采用新型磁存储技术的高容量磁盘 SMR盘将盘片上的数据磁道部分重叠 xff0c 就像屋顶上的瓦片一样 xff0c 这种技术被称为叠瓦式磁记录技术 该技术在
  • 如何将c++中utf-16编码的字符串(wstring)转为utf-8(string)?

    最近使用到了mysql connector cpp xff0c 通过这个库获取到的字符串类型是mysql string xff0c 其实其实质就是mysql自己实现的wstring 如果直接进行转换 xff1a mysqlx span cl
  • FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ‘:app:stripDe

    文章目录 问题描述解决方法 问题描述 android studio 编译2012 年的项目时出现了如下问题 xff1a FAILURE Build failed with an exception What went wrong Execu
  • 学习C++:使用C++11实现阻塞队列

    目录 1 代码 1 代码 span class token macro property span class token directive keyword ifndef span BLK QUEUE H span span class
  • Scoop安装遇到 “raw.githubusercontent.com未能解析” 解决方案

    想试试windows包管理器Scoop xff0c 但安装总是报错 xff1a iwr 未能解析此远程名称 39 raw githubusercontent com 39 所在位置 行 1 字符 1 43 iwr useb get scoo
  • Looking in indexes: xxx WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None

    docker 构建python程序报错 Step span class token number 7 span 10 span class token builtin class name span RUN pip3 span class
  • 通过github pages将自己的域名解析到csdn博客

    刚发表了一篇博客 发现做个人工作总结挺好用 鉴于研究生期间每周都要做周总结 xff0c 以后就每周用csdn博客来做总结草稿好了 现在用之前购买的域名来解析到个人博客以便于自己和其他人浏览 总结如下 xff1a 1 申请域名songweib
  • SecoClient在win10系统中连接失败解决方案

    官方的解决方案 xff1a 官方解决方案 解决过程中时遇到的可参考的解决方案 xff1a 可参考的解决方案 以上方案都无法解决的情况下的个人经历 xff1a 1 下午时不断尝试使用SecoClient进行连接但得到的提示都是如下图这样的警告
  • 修复win10启动项

    使用bcdboot修复win10启动项 修复前计算机状态 xff1a 只有win10系统分区 xff0c 没有EFI分区 步骤 xff1a 1 使用DiskGenius创建一个100MB的EFI分区 2 关闭计算机 xff0c 插入系统盘
  • 阿里云主机ubuntu20配置VNC出现的各种问题

    ubuntu可直接拉取安装的VNC软件有如 TightVNC xff0c TigerVNC 和 x11vnc 等 一 安装x11vnc出现的问题 安装x11vnc后发现从外网连接不到x11vnc的5900端口 xff0c 在x11vnc正常

随机推荐