CF988D题解

题目大意

题目传送门

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

思路

首先,我们想个数能不能组成一个满足题目要求的序列,答案是肯定的。(直接输出 a 1 a_1 a1 不就彳亍了吗)

再想个数彳亍不彳亍。看看样例:

输入 #1

6
3 5 4 7 10 12

输出 #1

3
7 3 5

举个栗子: 3 3 3 5 5 5 之间差距是 2 2 2,即 2 1 2^1 21

再来看个数的,样例输出就已经给了。

个数,还是举个栗子:

输入:
1 2 3 4

发现如果是个数, 1 1 1 4 4 4 相差 3 3 3,并不是 2 2 2 的次方,发现不行。

证明一下:

令四个数为 a , b , c , d a,b,c,d a,b,c,d,则:

∣ a − b ∣ = 2 x 0 , ∣ b − c ∣ = 2 x 1 , ∣ c − d ∣ = 2 x 2 |a-b|=2^{x_0}, |b-c|=2^{x_1}, |c-d|=2^{x_2} ab=2x0,bc=2x1,cd=2x2

此时需要满足两两之差为 2 2 2 的次方,则 x 0 = x 1 = x 2 x_0=x_1=x_2 x0=x1=x2

∣ a − c ∣ = 2 x 0 + 1 , ∣ b − d ∣ = 2 x 1 + 1 |a-c|=2^{x_0+1}, |b-d|=2^{x_1+1} ac=2x0+1,bd=2x1+1

∣ a − d ∣ = 3 × 2 x 0 ≠ 2 k |a-d|=3 \times 2^{x_0} \ne 2^k ad=3×2x0=2k

所以,可以满足题目要求的序列的元素个数只能输 1 , 2 , 3 1, 2, 3 1,2,3 个。

代码核心部分:

for (int i = 1;i <= n;i++) //枚举3个数组成的序列 
{for (int j = 0;j <= 30;j++){int w = sum[j]; //w获取了2的j次方if (s.count(a[i]+w) >= 1 && s.count(a[i]+2*w) >= 1) //判断是否有一个满足条件的序列 {printf("3\n%lld %lld %lld",a[i],a[i]+w,a[i]+2*w); //可以输出啦 return 0; //直接结束程序 }}
}

最后,附上我的 AC 代码:

#include <bits/stdc++.h> //万能头 
#define int long long //可能会超int 
using namespace std;
int n;
int a[200010];
set <int> s; //用集合去存储,会自动去重和排序 
int sum[40]; //sum[i]表示2的i次方 
signed main() //这里注意是signed 
{sum[0] = 1; //这里初始化是为了优化pow函数 for (int i = 1;i <= 30;i++){sum[i] = sum[i-1] * 2;}scanf("%lld",&n); //以防万一,就用scanf吧 for (int i = 1;i <= n;i++){scanf("%lld",&a[i]);s.insert(a[i]); //将a[i]加入集合 }for (int i = 1;i <= n;i++) //枚举3个数组成的序列 {for (int j = 0;j <= 30;j++){int w = sum[j]; //w获取了2的j次方if (s.count(a[i]+w) >= 1 && s.count(a[i]+2*w) >= 1) //判断是否有一个满足条件的序列 {printf("3\n%lld %lld %lld",a[i],a[i]+w,a[i]+2*w); //可以输出啦 return 0; //直接结束程序 }}}for (int i = 1;i <= n;i++) //枚举2个数组成的序列{for (int j = 0;j <= 30;j++){int w = sum[j]; //w获取了2的j次方if (s.count(a[i]+w) >= 1) //判断是否有一个满足条件的序列 {printf("2\n%lld %lld",a[i],a[i]+w); //可以输出啦 return 0; //直接结束程序 }}}printf("1\n%lld",a[1]); //最后,如果3个或2个都不行,那就随便输出原数列中的一个数 return 0;
}

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

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

相关文章

Android Studio之ImageView

ImageView是图像显示控件&#xff0c;与图形显示有关的属性说明如下: scaleType&#xff1a;指定图形的拉伸类型&#xff0c;默认是fitCenter。src&#xff1a;指定图形来源&#xff0c;src图形按照scaleType拉伸。 注意背景图不按scaleType指定的方式拉伸&#xff0c;背景默…

网络安全之交换基础

交换属于二层技术。路由器&#xff08;router&#xff09;是三层设备&#xff0c;可以基于IP地址转发&#xff0c;但需要路由表来记录。 交换机&#xff08;switch&#xff09;是二层设备&#xff0c;网桥&#xff08;switch&#xff09;也是二层设备&#xff0c;这两个都是基…

SegFix:预测边界和预测方向来修正边界

论文标题&#xff1a;SegFix: Model-Agnostic Boundary Refinement for Segmentation 论文地址&#xff1a;https://arxiv.org/pdf/2007.04269.pdf 代码地址&#xff1a;https://github.com/openseg-group/openseg.pytorch 两种loss监督 八种方向变回归问题为分类问题 代码地…

洛谷 P6136:【模板】普通平衡树(数据加强版) ← Splay树模板题

【题目来源】https://www.luogu.com.cn/problem/P6136【算法分析】 Splay 树简介及代码模板&#xff1a;https://blog.csdn.net/hnjzsyjyj/article/details/138504578【代码一&#xff1a;含 pushdown() 函数版本】 ● 本代码为洛谷 P6136 代码。题目来源为&#xff1a;https:…

PyQt6--Python桌面开发(1.安装配置环境)

一.PyQt6简介 PyQt&#xff1a;PyQt是一个功能强大且成熟的GUI框架&#xff0c;基于Qt库。它提供了丰富的组件、布局和主题选项&#xff0c;以及强大的功能和灵活性。PyQt的优点是它具有现代化的外观和丰富的功能&#xff0c;适用于复杂的GUI应用程序。然而&#xff0c;由于Py…

openEuler 22.03 GPT分区表模式下磁盘分区管理

目录 GPT分区表模式下磁盘分区管理parted交互式创建分区步骤 1 执行如下步骤对/dev/sdc磁盘分区 非交互式创建分区步骤 1 输入如下命令直接创建分区。 删除分区步骤 1 执行如下命令删除/dev/sdc1分区。 GPT分区表模式下磁盘分区管理 parted交互式创建分区 步骤 1 执行如下步骤…

明火检测实时识别报警:视觉算法助力安全生产管理

背景与现状 在各种工作、生产环境下&#xff0c;明火的存在往往是潜在的安全隐患。无论是加油站、化工园区、仓储场所还是校园&#xff0c;明火一旦失控就会引发火灾&#xff0c;造成严重的人员伤亡和财产损失。传统的明火检查手段主要依赖于人工巡查和定期的消防检查&#xf…

什么是高级持续威胁(APT)

高级持续性威胁&#xff08;Advanced Persistent Threat&#xff0c;APT&#xff09;&#xff0c;又叫高级长期威胁&#xff0c;是一种复杂的、持续的网络攻击&#xff0c;包含三个要素&#xff1a;高级、长期、威胁。 【高级】是指执行APT攻击需要比传统攻击更高的定制程度和…

预处理器标识#error的目的是什么?

在C和C编程语言中&#xff0c;预处理器标识#error是一个指令&#xff0c;它的目的是在编译过程中生成一个错误信息。当预处理器遇到#error指令时&#xff0c;它会停止编译过程&#xff0c;并显示#error后面的消息作为错误信息。这个指令通常用于确保某些条件在编译时得到满足&a…

人体姿态估计学习

人体姿态估计 1.绪论 人体姿态估计是计算机视觉中一个很基础的问题。从名字的角度来看&#xff0c;可以理解为对“人体”的姿态&#xff08;关键点&#xff0c;比如头&#xff0c;左手&#xff0c;右脚等&#xff09;的位置估计。 一般我们可以这个问题再具体细分成4个任务&…

小米手机短信删除了怎么恢复?这里教你快速解决!

手机已经成为我们生活中不可或缺的一部分&#xff0c;比如小米手机。我们通过手机进行通讯、娱乐、学习等各种活动&#xff0c;其中&#xff0c;短信是我们日常生活中的重要信息来源之一。然而&#xff0c;我们可能会不小心删除了一些重要的短信&#xff0c;这时候我们就会想知…

领航法律科技,法大大多年深耕再获认可!

近日&#xff0c;“乘势破局 第八届新兴法律服务业高峰论坛”在上海隆重举行。作为国内领先的电子签厂商&#xff0c;法大大凭借在法律科技领域的多年深耕与沉淀&#xff0c;荣获“法律科技领航机构”称号。 据悉&#xff0c;新兴法律服务业高峰论坛作为国内首个聚焦“新兴法律…

高等数学笔记(下中)

曲线积分 第一类曲线积分&#xff1a;对弧长的积分计算方法 定理&#xff1a;设 f ( x , y ) f(x,y) f(x,y)在曲线弧 L L L上有定义且连续&#xff0c; L L L的参数方程是 { x φ ( t ) y ψ ( t ) ( α ≤ t ≤ β ) \begin{cases} x\varphi(t)\\ y\psi(t) \end{cases}(\a…

一文了解什么是SSL证书?——值得收藏

SSL证书&#xff0c;全称Secure Sockets Layer证书&#xff0c;是一种网络安全协议的实现方式&#xff0c;现在通常指的是其继任者TLS&#xff08;Transport Layer Security&#xff09;证书&#xff0c;不过习惯上仍称为SSL证书。它的主要作用是确保互联网上的数据传输安全&am…

WebStorm2024版 将项目上传到gitee

目录 一、准备 WebStorm gitee 二、上传代码到Gitee 三、过程中遇到的问题 报错&#xff1a;You may want to first integrate the remote changes (e.g., git pull ...) before pushing again. 报错&#xff1a;fatal: refusing to merge unrelated histories 报错&a…

机器人系统ros2-开发实践05-ROS2 中 tf2的定义及示例说明

1. what ros2 tf2 &#xff1f; tf2的全称是transform2&#xff0c;在ROS&#xff08;Robot Operating System&#xff09;中&#xff0c;它是专门用于处理和变换不同坐标系间位置和方向的库。这个名字来源于“transform”这个词&#xff0c;表示坐标变换&#xff0c;而“2”则…

如何判断代理IP质量?

由于各种原因&#xff08;从匿名性和安全性到绕过地理限制&#xff09;&#xff0c;代理 IP 的使用变得越来越普遍。然而&#xff0c;并非所有代理 IP 都是一样的&#xff0c;区分高质量和低质量的代理 IP 对于确保流畅、安全的浏览体验至关重要。以下是评估代理 IP 质量时需要…

上升实用的Chrome浏览器命令

Chrome浏览器提供了一系列实用的命令行参数&#xff0c;这些参数可以在启动浏览器时使用&#xff0c;或者在Windows系统上通过命令提示符或PowerShell使用。以下是一些常用的Chrome浏览器命令&#xff1a; 1. **-incognito**&#xff1a;打开一个新的隐身窗口。隐身模式下&…

前端递归常见应用

概览 在 JavaScript 中&#xff0c;递归是一种编程技术&#xff0c;指的是函数直接或间接调用自身的过程。 递归通常用于解决可以分解为相同子问题的问题。通过不断地将问题分解成更小的、相似的子问题&#xff0c;直到达到某种基本情况&#xff08;不再需要进一步递归的简单情…