十分巧妙的一道题.
考虑当前凑出$[1,i/2)$,那么再有一个 $i/2$,就可以凑出 [i/2+1,i).
注意,这里的 $i$ 都是 2 的 $k$ 次幂.
于是,我们只要找到 $i$ 使得 2 的 $i$ 次幂刚好大于 $m$ 即可.
Code:
#include<bits/stdc++.h> using namespace std; int main(){ long long n,k=2; cin>>n; int i; for(i=1;k<=n;++i) k*=2; printf("%d",i); return 0; }