C. Johnny and Another Rating Drop

https://codeforces.com/problemset/problem/1362/C

题意:给定一个数n∈[0, 1e18],求每两个相邻的数的不同bit位数量的总和

思路:要找规律,发现相邻的两个数都是在最低的bit位上增加一,那么相邻的两个数最低位永远不同。那第二位应该是每两次比较就会出现一次不同,第三位应该是四次比较出现一次不同。得出公式:对于第i位,有(1ll << i)个数比较时,会有一次的bit不同。

总结:第一天没想出来,第二天才写出来的。这种题型没见过,但是可以知道是规律题,所以只能硬着头皮找规律了。。

inline void solve(){
    long long n;
    cin >> n;

    long long ans = 0;
    for (int i = 0; i < 64; ++i) {
        long long cur = (1ll << i);
        ans += (n / cur);
    }

    cout << ans << '\n';
}
posted @ 2025-03-04 09:32  _Yxc  阅读(1)  评论(0编辑  收藏  举报