CF988D Points and Powers of Two 题解

题目传送门


题目大意

题目描述

在坐标线上有 n n n 个不同的点,第 i i i 个点的坐标为 x i x_i xi。选择给定点集的一个子集,使得子集中每对点之间的距离是 2 d 2^d 2d 的整数幂。需要考虑每对点,而不仅仅是相邻的点。注意,包含一个元素的任何子集都满足上述条件。在所有这些子集中,选择具有最大可能大小的子集。

换句话说,你需要选择尽可能多的点 x i 1 , x i 2 , … , x i m x_{i_1}, x_{i_2}, \dots, x_{i_m} xi1,xi2,,xim,使得对于每一对 x i j x_{i_j} xij x i k x_{i_k} xik,满足 ∣ x i j − x i k ∣ = 2 d |x_{i_j} - x_{i_k}| = 2^d xijxik=2d,其中 d d d 是某个非负整数(不必对每对点都相同)。

输入格式

第一行包含一个整数 n n n 1 ≤ n ≤ 2 ⋅ 1 0 5 1 \le n \le 2 \cdot 10^5 1n2105)— 点的数量。

第二行包含 n n n 个两两不同的整数 x 1 , x 2 , … , x n x_1, x_2, \dots, x_n x1,x2,,xn − 1 0 9 ≤ x i ≤ 1 0 9 -10^9 \le x_i \le 10^9 109xi109)— 点的坐标。

输出格式

第一行输出一个整数 m m m — 满足上述条件的子集中点的最大可能数量。

第二行输出 m m m 个整数 — 选定子集中的点的坐标。

如果存在多个答案,输出其中任意一个即可。


解题思路

简化题意得:给你有 n n n 个数字的一个数列,问最多有多少个数字他们两两的差是 2 2 2 的幂次方数。

首先我们可以得出我们选择的数不超过 3 3 3 个。

为什么呢?我们都知道如果 2 i + 2 j = a k 2^i+2^j=a^k 2i+2j=ak,那么 i = j , k = 2 × i = 2 × j i=j,k=2\times i=2\times j i=j,k=2×i=2×j,我们设取出的 3 3 3 个数为 a , b , c a,b,c a,b,c,首先它们一定满足 ∣ a − b ∣ = 2 i , ∣ b − c ∣ = 2 j , ∣ a − c ∣ = 2 k |a-b|=2^i,|b-c|=2^j,|a-c|=2^k ab=2i,bc=2j,ac=2k

∵ ∣ a − c ∣ = ∣ a − b ∣ + ∣ b − c ∣ \because |a-c|=|a-b|+|b-c| ac=ab+bc

∴ k = i + j \therefore k = i + j k=i+j

因此我们可以构造这个序列,比如 a = 1 , b = 3 , c = 5 a=1,b=3,c=5 a=1,b=3,c=5

如果我们再取一个数 d d d,那么 ∣ a − b ∣ = 2 i , ∣ b − c ∣ = 2 j , ∣ c − d ∣ = 2 p , ∣ a − d ∣ = 2 q |a-b|=2^i,|b-c|=2^j,|c-d|=2^p,|a-d|=2^q ab=2i,bc=2j,cd=2p,ad=2q

∵ ∣ a − d ∣ = ∣ a − b ∣ + ∣ b − c ∣ + ∣ c − d ∣ \because |a-d|=|a-b|+|b-c|+|c-d| ad=ab+bc+cd

∴ q = i + j + p \therefore q=i+j+p q=i+j+p

然而 3 × 2 i ≠ 2 q 3\times 2^i \ne 2^q 3×2i=2q,这个序列既然连一部分的条件都满足不了,那么所有条件一定也不能全部满足,所以当我们取的数字数量为 4 4 4 的时候无解。

如果我们取 x ( x > 4 ) x(x>4) x(x>4) 个数字,那么包含了取 4 4 4 个数字的情况,显然无解。

所以我们取的序列长度必须小于等于 3 3 3,且经递增排序后,相邻两数之差相等。因此,我们可以先枚举整个序列中起始位置的数 y y y,再依次判断 y + 2 k , y + 2 k + 1 y+2^k,y+2^{k+1} y+2k,y+2k+1 是否在序列中出现过并进行统计即可。


CODE:

#include <bits/stdc++.h>
using namespace std;
#define int long long
int a[200010];
int n;
map<int, bool> m;
int k[200010];
signed main() {ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);cin >> n;for (register int i = 1; i <= n; i++) {cin >> a[i];m[a[i]] = 1;}int ans = 0;//蒟蒻赛时没有想那么多,这里枚举的是序列长度大于 1 且小于等于 3 的解for (register int i = 1; i <= n; i++) {for (register int j = 0; j <= 30; j++) {int o = 1;o <<= j;if (m.count(a[i] + o)) {  //也可以排序后二分哦int temp = a[i] + o;if (ans <= 2)k[1] = a[i], k[2] = temp, ans = 2;if (m.count(temp + o)) {cout << 3 << endl;cout << k[1] << ' ' << k[2] << ' ' << k[2] + o;return 0;}}}}if (ans == 0) {    //如果找不到长度大于 1 且小于等于 3 的序列随便输出序列中的一个数即可。cout << 1 << endl;cout << a[1] << endl;return 0;}cout << ans << endl;for (int i = 1; i <= ans; i++)cout << k[i] << ' ';return 0;
}

总结

这道题目主要是序列长度小于等于 3 3 3 的地方需要一定的时间去证明,总体来说思路比较容易想到。

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

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

相关文章

如何设置天锐绿盾的数据防泄密系统

设置天锐绿盾的数据防泄密系统&#xff0c;可以按照以下步骤进行&#xff1a; 一、系统安装与初始化 在线或离线安装天锐绿盾数据防泄密系统&#xff0c;确保以管理员身份运行安装包&#xff0c;并按照安装向导的提示完成安装。输入序列号进行注册&#xff0c;激活系统。 二…

AI会淘汰程序员吗?提示词工程师是答案吗?

在科技领域&#xff0c;每两年就会有一个热门概念&#xff0c;吸引大量的人力、物力投入&#xff0c;大数据、区块链、WEB3、5G、元宇宙莫不如此&#xff0c;2023年爆火的AI会是下一个雷声大雨点小的泡沫吗&#xff1f; 这个问题其实不太好回答&#xff0c;在元宇宙兴起初期&a…

汽车传动系统为汽车动力总成重要组成部分 我国市场参与者数量不断增长

汽车传动系统为汽车动力总成重要组成部分 我国市场参与者数量不断增长 汽车系统主要包括动力系统、制动系统、传动系统、转向系统、行驶系统、燃油供给系统、照明系统以及电器系统。汽车传动系统指能够将发动机产生的动力转化为车辆行驶驱动力的动力传递装置。汽车传动系统为汽…

C++数据格式化1 - uint转换成字符串 double转换成字符串

1. 关键词2. strfmt.h3. strfmt.cpp4. 测试代码5. 运行结果6. 源码地址 1. 关键词 C 数据格式化 字符串处理 std::string int double 跨平台 2. strfmt.h #pragma once#include <string> #include <cstdint> #include <sstream> #include <iomanip>…

利用原生HTML + CSS + JS实现歌词滚动

对于很多音乐APP&#xff0c;都有这么一个功能&#xff0c;就是根据歌曲的进度来控制对应的歌词滚动&#xff0c;如下图所示&#xff1a; 大概这样的效果&#xff0c;我此次是使用原生的HTMLCSSJS来实现的&#xff0c;以下是具体的实现过程。 1. 数据获取与处理 对于数据来源&…

40、基于深度学习的线性预测设计(matlab)

1、原理及流程 深度学习的线性预测是一种利用深度神经网络模型进行线性回归预测的方法。其设计原理主要基于神经网络的层次化特性&#xff0c;利用多层感知器&#xff08;MLP&#xff09;等模型进行特征学习和非线性变换&#xff0c;从而提高线性预测的准确性。 设计流程如下…

Siemens-NXUG二次开发-创建平面(无界非关联)、固定基准面[Python UF][20240614]

Siemens-NXUG二次开发-创建平面&#xff08;无界非关联&#xff09;、固定基准面[Python UF][20240614] 1.python uf函数1.1 NXOpen.UF.Modeling.CreatePlane1.2 NXOpen.UF.ModlFeatures.CreateFixedDplane 2.示例代码2.1 pyuf_plane.py 3.运行结果3.1 内部模式3.1.1 NXOpen.UF…

应变玻璃合金是航天产业重要弹性材料 研究开发意义重大

应变玻璃合金是航天产业重要弹性材料 研究开发意义重大 应变玻璃&#xff0c;是一种形状记忆合金&#xff0c;为纳米级材料&#xff0c;其短程有序晶格应变区域呈冻结状态&#xff0c;具有典型的玻璃化转变特征&#xff0c;可以对外界刺激产生应变反应&#xff0c;也称为应变玻…

数据库 | 数据库设计的步骤

1.需求分析 调查机构情况与熟悉业务活动&#xff0c;明确用户的需求&#xff0c;确定系统的边界&#xff0c;生成数据字典和用户需求规格说明书 2.概念结构设计 将从需求分析中得到的用户需求抽象为概念模型&#xff0c;设计E-R模型 3.逻辑结构设计 将E-R图转换为和DBMS相…

【网络编程开发】17.“自动云同步“项目实践

17."自动云同步"项目实践 文章目录 17."自动云同步"项目实践项目简介功能需求需求分析实现步骤 1.实现TCP通信server.c 服务端tcp.hclient.c 客户端 函数封装tcp.ctcp.hserver.cclient.c编译运行 2.实现文件传输sever.cclient.ctcp.ctcp.hMakeifle编译运行…

MES管理系统中的质量管理活动是什么

在制造业的广阔天地中&#xff0c;质量管理如同航船的指南针&#xff0c;指引着产品品质的航行方向。而随着科技的日新月异&#xff0c;MES管理系统在质量管理领域扮演着越来越重要的角色。MES管理系统不仅连接了企业的管理层与车间生产现场&#xff0c;更在质量管理的各个环节…

RS485常见问题及解决方法

RS485常见问题及解决方法 RS485总线是工业上最常用的通信方式之一&#xff0c;在实际布线或使用过程中通常会出现一系列问题&#xff0c;今天总结一些平时RS485通讯可能会出现的通讯问题及其解决方法以供大家参考。 一、什么是RS485&#xff1f; RS485&#xff0c;全称为TIA…

QT(超详细从0开始)

目录 1.2 Qt的优点 2.安装Qt 3.创建项目 4.解读Qt自动生成的代码 ​编辑 5.Qt Designer 6.Qt对象数 7.Qt乱码问题 8.Qt坐标系的认识 9.信号和槽 9.1 connect 9.2 自定义槽函数 9.3 自定义信号 9.4 断开信号链接&#xff08;disconnect&#xff09; 9.5.lambda表…

家庭智能助手:Kompas AI引领家居智能化新纪元

一、引言 在数字化浪潮的推动下&#xff0c;现代家庭生活正迅速向智能化转型。从简单的自动化设备到复杂的智能家居系统&#xff0c;智能技术正悄无声息地改变我们的日常生活。Kompas AI作为一款前沿的家庭智能助手&#xff0c;不仅预示着家庭生活的未来趋势&#xff0c;更以其…

使用 Verdaccio 建立私有npm库

网上有很多方法,但很多没标注nginx的版本所以踩了一些坑,下方这个文档是完善后的,对linux不是很熟练,所以不懂linux不会搭建的跟着做就可以了 搭建方法 首先需要一台云服务器 以139.196.226.123为例登录云服务器 下载node cd /usr/local/lib下载node 解压 下载 wget https://…

Python内置函数pow()详解

在Python编程中&#xff0c;pow()函数是一个非常有用的内置函数&#xff0c;它用于计算一个数的指数幂。这个函数在数学计算、科学研究、加密算法等领域中都非常实用。 函数功能 pow()函数的主要功能是计算给定数值的指数幂。当提供第三个参数时&#xff0c;它还可以返回指数…

帕金森运动小贴士,壁纸里的健康密码

&#x1f31f; 在这个快节奏的时代&#xff0c;我们越来越关注身体的健康。今天&#xff0c;我想和大家分享一份特别的小贴士&#xff0c;它藏在一张精致的小红书壁纸里&#xff0c;是关于帕金森病的运动建议。帕金森病是一种常见的神经系统疾病&#xff0c;适当的运动对于缓解…

窄依赖和宽依赖的相关函数

在Apache Spark和Apache Flink这类分布式计算系统中&#xff0c;窄依赖和宽依赖描述的是数据在不同计算阶段&#xff08;或称作“阶段”、“stage”&#xff09;之间的流动方式。以下是一些典型的窄依赖和宽依赖函数示例&#xff1a; ### 窄依赖相关函数&#xff08;Narrow De…

小米充电宝怎么样?西圣、小米、罗马仕充电宝测评谁是卷王!

充电宝说实话在我们日常生活中还是非常常见的一个出门必备的充电设备&#xff0c;除了出门必须带数据线之外&#xff0c;充电宝也是不例外的&#xff0c;对于手机不耐电的朋友来说在外面有一个充电宝简直就是蓄电“救星”&#xff0c;什么都可以不带但是充电宝是必带的一款装备…

Ubuntu 在线或离线安装docker

查看自己的ubuntu版本 在终端中执行以下命令&#xff1a; lsb_release -a 终端中的复制粘贴&#xff1a; ctrl shift c ctrl shifr v 在线安装docker&#xff08;不需要外网&#xff09;: 命令行安装&#xff1a;Ubuntu Docker -- 从入门到实践 看完…