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; }