题解 | #追求女神#

计算几何

https://ac.nowcoder.com/acm/contest/11173/B

B题题解

思路:

自定义一个函数 sum(n) 求得 [1,n]范围内满足要求的数 的个数
sum(r)-sum(l-1) 就是最后的结果
问题在于sum(n) 函数的构造:
通过手推:我们会发现  因此我们可以自定义出sum(n)函数,快速求出[1,n]范围内满足要求的数 的个数

ps:注意使用long long

代码如下:

#include <iostream>
#include <algorithm>

using namespace std;

typedef long long ll;

// 返回最低位的1
ll lowbit(ll x){
    return x & -x;
}

// 判断是否 n在二进制下有奇数个1
bool check(ll n){
    int res=0;
    while(n) res++,n-=lowbit(n);
    if(res&1) return true;
    return false;
}

// 求1到n 满足要求的数 个数
ll sum(ll n){
    ll ans=0;
    while(n){
     if((n+1)%4==0)  return ans+(n+1)/2;
     if(check(n)) ans++;   
     n--;
    }
    return ans;
}

int main(){
    int T;
    cin>>T;

    while(T--){
      ll l,r;    
      cin>>l>>r;
      cout<<sum(r)-sum(l-1)<<endl;  
    }

    return 0;
}
全部评论

相关推荐

今天 00:11
已编辑
广东工业大学 算法工程师
避雷深圳&nbsp;&nbsp;yidao,试用期&nbsp;6&nbsp;个月。好嘛,试用期还没结束,就直接告诉你尽快找下一家吧,我谢谢您嘞
牛客75408465号:笑死,直属领导和 hr 口径都没统一,各自说了一些离谱的被裁理由,你们能不能认真一点呀,哈哈哈哈哈😅😅😅
点赞 评论 收藏
分享
牛舌:如果我不想去,不管对方给了多少,我一般都会说你们给得太低了。这样他们就会给下一个offer的人更高的薪资了。
点赞 评论 收藏
分享
shtdbb_:还不错,没有让你做了笔试再挂你
点赞 评论 收藏
分享
7 收藏 评论
分享
牛客网
牛客企业服务