一开始只知道是约瑟夫问题,打野就是隔一个fly一个,求最后那个,可是我 O(n) 速度不是开玩笑,后来,我问到了一个 O(logn) 的方法,不过只对隔1杀1有效
#include<bits/stdc++.h>
using namespace std;
int n,k;
int main(){
while(cin>>n){
k=1;
while(k<=n)k<<=1;
cout<<n*2-k+1<<endl;
}
return 0;
}