题解 | #追求女神#

计算几何

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;
}
全部评论

相关推荐

10-14 23:01
已编辑
中国地质大学(武汉) Java
CUG芝士圈:虽然是网上的项目,但最好还是包装一下,然后现在大部分公司都在忙校招,十月底、十一月初会好找一些。最后,boss才沟通100家,别焦虑,我去年暑假找第一段实习的时候沟通了500➕才有面试,校友加油
点赞 评论 收藏
分享
10-07 20:48
门头沟学院 Java
听说改名就会有offer:可能是实习上着班想到后面还要回学校给导师做牛马,看着身边都是21-25的年纪,突然emo了了
点赞 评论 收藏
分享
7 收藏 评论
分享
牛客网
牛客企业服务