给定n个点,编号为0~n-1
对于每两个不同的点i,j(i!=j),他们之间有一条边,边权为i与j的异或值
即对于任意的i,j(i!=j) i与j之间有一条边为,边权为i^j
请输出这个完全图的最小生成树的边权之和.
n数据范围:2<=n<=10^12
//
#include<cstdio>
#define ll long long
using namespace std;
ll n,ans,base=1;
int main(){
scanf("%lld",&n);
while(n>1){
ans+=base*(n>>1);base<<=1;n-=n>>1;
}printf("%lld\n",ans);
return 0;
}
这是标答代码 啥意思呀 我理解不了