标签:sign tps ret std test contest names long printf
定义两个数字的差异为他们二进制相应位置不一样的个数,给出n,让求 0 和 1 , 1 和 2 ... n-1 和 n 的差异和。
n这么大,多半是有规律的。
打表发现
1 1
2 3
4 7
8 15
把 n 表示为二进制,如果它的第 i 位为 1 ,那么最终的答案 + \(2^{i+1}-1\)
#include<bits/stdc++.h>
#define pb push_back
using namespace std;
const int N=1024+10;
const int mod=50331653;
const int inf=0x3f3f3f3f;
typedef unsigned long long ull;
typedef long long ll;
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
ull n;
scanf("%llu",&n);
ull x=1,ans=0;
for(int i=0;i<64;i++)
{
if((x<<i)&n)
ans+=(x<<(i+1))-1;
}
printf("%llu\n",ans);
}
return 0;
}
/*
*/
【CF-1362】C. Johnny and Another Rating Drop
标签:sign tps ret std test contest names long printf
原文地址:https://www.cnblogs.com/valk3/p/13067547.html