码迷,mamicode.com
首页 > 其他好文 > 详细

【CF-1362】C. Johnny and Another Rating Drop

时间:2020-06-08 19:33:36      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:sign   tps   ret   std   test   contest   names   long   printf   

C. Johnny and Another Rating Drop

题意

定义两个数字的差异为他们二进制相应位置不一样的个数,给出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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!