列表

详情


NC25575. 偶数计算

描述

输入描述

输入包含三个正整数n,l,r (1<= n,l,r <= 1e18)保证n>=r且r>=l

输出描述

输出一行一个整数表示答案

示例1

输入:

1 1 1

输出:

0

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++11(clang++ 3.9) 解法, 执行用时: 5ms, 内存消耗: 492K, 提交时间: 2019-05-11 14:47:02

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n,l,r;
int m,i,a[100];
ll work(ll x)
{
    int i;
    ll ans=0;
    for(i=m-1;~i;i--)if(x>>a[i])
    {
        x-=1LL<<a[i];
        ans+=1LL<<i;
    }
    return ans;
}
int main()
{
    cin>>n>>l>>r;
    for(i=0;i<60;i++)if(n>>i&1)a[m++]=i;
    cout<<r-l+1-work(r)+work(l-1)<<endl;
    return 0;
}

C++14(g++5.4) 解法, 执行用时: 4ms, 内存消耗: 504K, 提交时间: 2019-11-09 17:59:58

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int a[100],m=0;
ll work(ll x)
{
	ll ans=0;
	for(int i=m-1;~i;i--)
	 if(x>>a[i])
	 {
	 	x-=1ll<<a[i];
	 	ans+=1ll<<i;
	 } 
	return ans;
}
int main()
{
    ll n,l,r;
    cin>>n>>l>>r;
    for(int i=0;i<60;i++)if(n>>i&1) a[m++]=i;
    cout<<r-l+1-work(r)+work(l-1)<<endl;
    return 0;
}

上一题