Points and Powers of Two
很难证明出这个合法数列最大值就是3。。
然后就好做了
假设存在四个数
x , x+2^i ,x + 2^j , x + 2^l
x+2^j - x-2^i = 2^j - 2^i 要是2的整数倍 j=i+1; 同理 l=j+1 那么第二个数和第四个数就不满足差值是2的幂了QUQ。
#include<iostream>
#include<cstring>
#include<vector>
#include<algorithm>
#include<map>
#include<set>
using namespace std;
typedef long long ll;
const int N=200010;
int n,m;
ll a[N];
int idx,h[N],ne[N*2],e[N*2];
int f[N];
int col[N];
vector<int>v[N];
set<ll>s;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin >> n;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=n;i++)
s.insert(a[i]);
for(int i=1;i<=n;i++)
{
for(ll j=1;j<=2e9;j*=2)
{
if(s.count(a[i]+j) && s.count(a[i]+2*j))
{
cout<<3<<endl;
cout<<a[i]<<' '<<a[i]+j<<' '<<a[i]+2*j<<endl;
return 0;
}
}
}
for(int i=1;i<=n;i++)
{
for(ll j=1;j<=2e9;j*=2)
{
if(s.count(a[i]+j) )
{
cout<<2<<endl;
cout<<a[i]<<' '<<a[i]+j<<endl;
return 0;
}
}
}
cout<<1<<endl;
cout<<a[1]<<endl;
return 0;
}