原文地址:https://blog.csdn.net/weixin_39453270/article/details/80548442

博主已经讲的很好了

题意:

  从一个序列中,选出一个集合,使得集合里的数两两差得绝对值为2得幂次

解析:

对于这个题目,我们需要发现这么一个结论,答案中形成的集合的大小最大只能达到3。

下面对这个命题进行简单的证明:

我们设当集合大小=3,三个数从小到大分别为a,b,c,即要符合条件,则需要满足:

b-a=k1 (1)

c-b=k2 (2)

c-a=k3 (3)

将(2)+(1)可得 c-a=k1+k2,再根据(3)可得

k3=k1+k2。

因为我们知道,要满足题意,k1,k2,k3都必须为2的幂。而要使得2^a1+2^b1==2^c1成立,则不难得出,当且仅当a1==b1时成立,即k1==k2时成立,此时,不难发现,a,b,c三个数是形成一个以2得幂次为公差的等差数列。

而当集合的大小>=4时,设大小为4,四个数由大到小分别为a,b,c,d。则根据上面的证明,则我们要满足答案,则需要abc、abd、acd、bcd......所有的三元组都需要满足上述式子。显然这是不成立的,因此,大小大于3的答案是不合理的。

因此,我们只需要考虑三个以内的答案即可。首先我们需要开一个set记录数列中的数。而因为存在的几个数是需要满足等差数列的,因此,我们可以枚举1到1e9中2的幂次j,判断a+j和a+j+j是否在set内即可。倘若都不在set内,则随便输出一个数即可。

#include <bits/stdc++.h>
#define mem(a, b) memset(a, b, sizeof(a))
using namespace std;
const int maxn = 1e6+, INF = 0x7fffffff;
typedef long long LL;
LL a[maxn];
set<LL> s; int main()
{
int n;
cin>> n;
for(int i=; i<n; i++)
{
cin>> a[i];
s.insert(a[i]);
}
for(int i=; i<n; i++)
{
for(LL j=; j<=2e9; j<<=)
if(s.count(a[i]+j) && s.count(a[i] + j*))
{
cout<< "" <<endl;
cout<< a[i] << " " << a[i] + j << " " << a[i] + j* <<endl;
return ;
}
}
for(int i=; i<n; i++)
{
for(LL j=; j<=2e9; j<<=)
if(s.count(a[i]+j))
{
cout<< "" <<endl;
cout<< a[i] << " " << a[i] + j <<endl;
return ;
}
}
cout<< <<endl;
cout<< a[] <<endl; return ;
}

CodeForces - 988D(思维STL)的更多相关文章

  1. Codeforces 988D Points and Powers of Two ( 思维 || 二的幂特点 )

    题目链接 题意 : 给出坐标轴上的 n 个点的横坐标,要你选出最多的点,使得这些点两两距离是二的幂 ( 特殊情况 : 选出的集合只有一个点也满足条件 ) 分析 : 官方题解已经说的很好了 最关键是是判 ...

  2. 883H - Palindromic Cut(思维+STL)

    题目链接:http://codeforces.com/problemset/problem/883/H 题目大意:给一段长度为n的字符串s,想让你把s切成几段长度相同的回文串,可以改变s中字符的排列, ...

  3. Codeforces 424A (思维题)

    Squats Time Limit: 1000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Submit Statu ...

  4. Codeforces 1060E(思维+贡献法)

    https://codeforces.com/contest/1060/problem/E 题意 给一颗树,在原始的图中假如两个点连向同一个点,这两个点之间就可以连一条边,定义两点之间的长度为两点之间 ...

  5. Queue CodeForces - 353D (思维dp)

    https://codeforces.com/problemset/problem/353/D 大意:给定字符串, 每一秒, 若F在M的右侧, 则交换M与F, 求多少秒后F全在M左侧 $dp[i]$为 ...

  6. 【codeforces 190C】STL

    [题目链接]:http://codeforces.com/problemset/problem/190/C [题意] 让你根据去掉标点符号的; pair 以及 int这两种类型; 确定出一种类型; 使 ...

  7. codeforces 1244C (思维 or 扩展欧几里得)

    (点击此处查看原题) 题意分析 已知 n , p , w, d ,求x , y, z的值 ,他们的关系为: x + y + z = n x * w + y * d = p 思维法 当 y < w ...

  8. Codeforces 732e [贪心][stl乱搞]

    /* 不要低头,不要放弃,不要气馁,不要慌张 题意: 给n个插座,m个电脑.每个插座都有一个电压,每个电脑都有需求电压. 每个插座可以接若干变压器,每个变压器可以使得电压变为x/2上取整. 有无限个变 ...

  9. CodeForces - 417B (思维题)

    Crash Time Limit: 1000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Submit Status ...

随机推荐

  1. Kali Linux 下安装中文版输入法

    1.更新软件源: 修改sources.list文件: vim /etc/apt/sources.list 或者 leafpad /etc/apt/sources.list 然后选择添加以下源: deb ...

  2. CentOS搭建Docker Hub私有仓库

    docker pull registry拉取registry镜像 docker images查看镜像 docker run -d -p 5000:5000 -v /opt/data/registry: ...

  3. java事务 深入Java事务的原理与应用

    一.什么是JAVA事务 通常的观念认为,事务仅与数据库相关. 事务必须服从ISO/IEC所制定的ACID原则.ACID是原子性(atomicity).一致性(consistency).隔离性 (iso ...

  4. 木马分析出现python语言,360的安全人员不禁感叹还有这种操作?

    几年前,敲诈者木马还是一个默默无闻的木马种类.然而,由于其极强的破坏力和直接且丰厚的财富回报,敲诈者木马这几年已经一跃成为曝光率最高的木马类型——甚至超越了盗号木马.远控木马.网购木马这传统三强.与此 ...

  5. Hyperledger Fabric Capabilities——超级账本功能汇总

    Hyperledger Fabric是一种模块化的区块链架构,是分布式记账技术(DLT)的一种独特的实现,它提供了可供企业运用的网络,具备安全.可伸缩.加密和可执行等特性.Hyperledger Fa ...

  6. UVa 10055

    说一下犯错的地方: 1)没有注意数据范围,题目中是The input numbers are not greater than balabalabala. 而这个32位的int类型恰好装不下2^32, ...

  7. Redis学习(一):CentOS下redis安装和部署

    1.基础知识  redis是用C语言开发的一个开源的高性能键值对(key-value)数据库.它通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止redis支持的键值数据类型如下字符串.列表 ...

  8. centos 切换用户显示bash-4.2$,不显示用户名路径的问题

    原文链接: http://blog.csdn.net/testcs_dn/article/details/70482468

  9. OO学习总结与体会

    前言 经过了对于面向对象程序设计的一个月的学习,我初尝了JAVA以及面向对象程序的魅力.经历了三次难度逐渐加大的课后编程作业,我对于工程化面向对象编程以及调试有了深刻的认识与颇多感想.我写下本篇文章以 ...

  10. 第三次博客作业JSF

    JSF规格化设计发展史以及为什么得到人们重视 查阅了n多资料但是仍然没找到. 就说一些jsf的优势吧. 优势:    (1)UI组件 (2)事件驱动模式 (3)用户界面到业务逻辑的直接映射 (4)程序 ...