原文地址: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. Mweb发布博客

    1.设置 + 选择红色 2     输入该输入的帐号和密码  博客网址就是你的博客文章页的地址,然后输入帐号和密码 3 API 地址在 设置-->博客设置,红色标记就是API地址 4 发布, ...

  2. TPO-21 C1 Find a building for orientation

    TPO-21 C1 Find a building for orientation 第 1 段 1.Listen to a conversation between a student and a p ...

  3. Netty源码分析第6章(解码器)---->第2节: 固定长度解码器

    Netty源码分析第六章: 解码器 第二节: 固定长度解码器 上一小节我们了解到, 解码器需要继承ByteToMessageDecoder, 并重写decode方法, 将解析出来的对象放入集合中集合, ...

  4. 机器学习算法 --- Decision Trees Algorithms

    一.Decision Trees Agorithms的简介 决策树算法(Decision Trees Agorithms),是如今最流行的机器学习算法之一,它即能做分类又做回归(不像之前介绍的其他学习 ...

  5. 在NodeJS中使用Redis缓存数据

    Redis数据库采用极简的设计思想,最新版的源码包还不到2Mb.其在使用上也有别于一般的数据库. node_redis redis驱动程序多使用 node_redis 此模块可搭载官方的 hiredi ...

  6. 编写webpack 插件

    Webpack插件为第三方开发者释放了Webpack的最大可能性.利用多级回调开发者可以把他们自己的需要的功能引入到Webpack里面来.Build插件比Build loader 更进一步.因为你需要 ...

  7. css修改input自动提示的黄色背景

    css修改input自动提示的黄色背景 input:-webkit-autofill { background-color: #FAFFBD; background-image: none; -web ...

  8. Scrum Meeting 10.23

    Scrum Meeting No.3 今天所完成的任务仍然停留在学习基础知识上.说实话,由于缺少安卓开发.web开发的经验,我们只能一步步摸索着来. 成员 已完成任务 下一阶段任务 徐越 阅读网上的博 ...

  9. 2018-2019-20172321 《Java软件结构与数据结构》第七周学习总结

    2018-2019-20172321 <Java软件结构与数据结构>第七周学习总结 教材学习内容总结 第11章 二叉查找树 一.概述 二叉查找树是一种含有附加属性的二叉树,该属性即其左孩子 ...

  10. 20172319 2018.04.01-04.11 《Java程序设计》第5周学习总结

    20172319 2018.04.01-04.11 <Java程序设计>第5周学习总结 目录 教材学习内容总结 教材学习中的问题和解决过程 代码调试中的问题和解决过程 代码托管 上周考试错 ...