【数字游戏

【数字游戏 ,第1张



注:CV的, 也可以自行去查找题解

按照题意模拟即可,每次取最高位可以不断用x−=lowbit(x)x-=lowbit(x)x−=lowbit(x)减去最低位,直到剩下最高位 每次 *** 作是logxlog xlogx的,最多 *** 作logxlogxlogx次,因为位运算常数小,所以可以通过

#include
#define lowbit(x) (x & -x)
using namespace std;
int t, n;
int main() {
    scanf("%d", &t);
    while(t --) {
        scanf("%d", &n);
        int ans = 0;
        while(n) {
            int x = n, gs = 0;
            int ha = lowbit(x), haa = 0;
            while(x) {
                if(x == lowbit(x)) haa = lowbit(x);
                x -= lowbit(x);
                gs ++;
            }
            if(gs & 1) n ^= 1;
            else n -= haa;
            ans ++;
        }
        printf("%d\n", ans);
        
    }
    return 0;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/562479.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-01
下一篇 2022-04-01

发表评论

登录后才能评论

评论列表(0条)

保存