CF&&CC百套计划4 Codeforces Round #276 (Div. 1) A. Bits
2018-01-05 21:56
666 查看
http://codeforces.com/contest/484/problem/A
题意:
询问[a,b]中二进制位1最多且最小的数
贪心,假设开始每一位都是1
从高位i开始枚举,
如果当前数>b,且减去1<<i后仍>=a,就减1<<i
当当前数在[a,b]之间时,输出
因为从高位开始减,所以保证当前数是最小的
A. Bits
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
Let's denote as
the number of bits set ('1' bits) in the binary representation of the non-negative integer x.
You are given multiple queries consisting of pairs of integers l and r. For each query, find the x, such that l ≤ x ≤ r, and
is maximum possible. If there are multiple such numbers find the smallest of them.
Input
The first line contains integer n — the number of queries (1 ≤ n ≤ 10000).
Each of the following n lines contain two integers li, ri — the arguments for the corresponding query (0 ≤ li ≤ ri ≤ 1018).
Output
For each query print the answer in a separate line.
Examples
input
output
Note
The binary representations of numbers from 1 to 10 are listed below:
110 = 12
210 = 102
310 = 112
410 = 1002
510 = 1012
610 = 1102
710 = 1112
810 = 10002
910 = 10012
1010 = 10102
题意:
询问[a,b]中二进制位1最多且最小的数
贪心,假设开始每一位都是1
从高位i开始枚举,
如果当前数>b,且减去1<<i后仍>=a,就减1<<i
当当前数在[a,b]之间时,输出
因为从高位开始减,所以保证当前数是最小的
#include<cstdio> #include<iostream> using namespace std; typedef long long LL; LL bit[61]; void read(LL &x) { x=0; char c=getchar(); while(!isdigit(c)) c=getchar(); while(isdigit(c)) { x=x*10+c-'0'; c=getchar(); } } int main() { bit[0]=1; for(int i=1;i<=60;++i) bit[i]=bit[i-1]<<1; int n; scanf("%d",&n); LL a,b; LL ans; while(n--) { read(a); read(b); ans=(1LL<<61)-1; for(int i=60;i>=0;--i) { if(ans>b && ans-bit[i]>=a) ans-=bit[i]; if(ans>=a && ans<=b) break; } cout<<ans<<'\n'; } }
A. Bits
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
Let's denote as
the number of bits set ('1' bits) in the binary representation of the non-negative integer x.
You are given multiple queries consisting of pairs of integers l and r. For each query, find the x, such that l ≤ x ≤ r, and
is maximum possible. If there are multiple such numbers find the smallest of them.
Input
The first line contains integer n — the number of queries (1 ≤ n ≤ 10000).
Each of the following n lines contain two integers li, ri — the arguments for the corresponding query (0 ≤ li ≤ ri ≤ 1018).
Output
For each query print the answer in a separate line.
Examples
input
3 1 2 2 4 1 10
output
1 3 7
Note
The binary representations of numbers from 1 to 10 are listed below:
110 = 12
210 = 102
310 = 112
410 = 1002
510 = 1012
610 = 1102
710 = 1112
810 = 10002
910 = 10012
1010 = 10102
相关文章推荐
- CF&&CC百套计划3 Codeforces Round #204 (Div. 1) D. Jeff and Removing Periods
- CF&&CC百套计划3 Codeforces Round #204 (Div. 1) E. Jeff and Permutation
- CF&&CC百套计划3 Codeforces Round #204 (Div. 1) A. Jeff and Rounding
- CF&&CC百套计划3 Codeforces Round #204 (Div. 1) B. Jeff and Furik
- CF&&CC百套计划4 Codeforces Round #276 (Div. 1) E. Sign on Fence
- CF&&CC百套计划1 Codeforces Round #449 C. Willem, Chtholly and Seniorious (Old Driver Tree)
- CF&&CC百套计划2 CodeChef December Challenge 2017 Chef And his Cake
- CF&&CC百套计划2 CodeChef December Challenge 2017 Penalty Shoot-out
- CF&&CC百套计划2 CodeChef December Challenge 2017 Total Diamonds
- CF&&CC百套计划1 Codeforces Round #449 A. Nephren gives a riddle
- CF&&CC百套计划2 CodeChef December Challenge 2017 Chef and Hamming Distance of arrays
- CF&&CC百套计划1 Codeforces Round #449 B. Ithea Plays With Chtholly
- CF&&CC百套计划2 CodeChef December Challenge 2017 Chef And Easy Xor Queries
- CF Beta Round #89 (Div. 2) - Caesar's Legions
- 【打CF,学算法——三星级】Codeforces Round #313 (Div. 2) C. Gerald's Hexagon
- CF 150&&152 div 2
- CF 276 Div2 C Bits
- CF Round #218 (Div. 2) && CF 371D Vessels【并查集】
- CF 203 div2 E. Wrong Floyd 图论
- CF 251 div2 题解