Points and Powers of Two

tech2024-10-03  15

很难证明出这个合法数列最大值就是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; }
最新回复(0)