Codeforces 484(#276 Div 1) A Bits 乱搞

题意:给你一个非负整数范围,求其中二进制中 1 最多且数字最小的数

解题思路:乱搞,找到两个数第一个不匹配的位数,将后面的位都赋值为1(如果右端点这位本身就是1,则从这一位开始),

解题代码:

 1 // Author: darkdream
 2 // Created Time: 2014年11月06日 星期四 00时24分10秒
 3
 4 #include<vector>
 5 #include<list>
 6 #include<map>
 7 #include<set>
 8 #include<deque>
 9 #include<stack>
10 #include<bitset>
11 #include<algorithm>
12 #include<functional>
13 #include<numeric>
14 #include<utility>
15 #include<sstream>
16 #include<iostream>
17 #include<iomanip>
18 #include<cstdio>
19 #include<cmath>
20 #include<cstdlib>
21 #include<cstring>
22 #include<ctime>
23 #define LL long long
24
25 using namespace std;
26 int main(){
27     int n ;
28     LL l , r;
29     scanf("%d",&n);
30     for(int i = 1;i <= n;i ++)
31     {
32         LL ans = 0 ;
33         scanf("%I64d %I64d",&l,&r);
34         for(int i = 62 ;i >= 0 ;i --)
35         {
36             if((r&(1ll << i)) != 0 )
37             {
38                 if((l & (1ll << i)) != 0 )
39                 {
40                     ans += (1ll << i);
41                     r &=  (~(1ll << i));
42                     l &=  (~(1ll << i));
43                 }else{
44                     if((1ll << (i+1))-1 <= r)
45                     {
46                         ans +=  (1ll << (i+1)) -1;
47                     }
48                     else ans += (1ll << i ) - 1;
49                     break;
50                 }
51             }
52
53         }
54         printf("%I64d\n",ans);
55     }
56     return 0;
57 }

时间: 2024-10-09 02:43:28

Codeforces 484(#276 Div 1) A Bits 乱搞的相关文章

Codeforces Round #276 (Div. 1) A. Bits 贪心

A. Bits 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 max

Codeforces Round #276 (Div. 2)C. Bits(构造法)

这道题直接去构造答案即可. 对于l的二进制表示,从右到左一位一位的使其变为1,当不能再变了(再变l就大于r了)时,答案就是l. 这种方法既可以保证答案大于等于l且小于等于r,也可以保证二进制表示时的1最多. #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<string> #include<cmath> #include&l

Codeforces 484(#276 Div 1) D Kindergarten DP

题意:给你一个数组,让你把连续的数分为一组,每一组的值为这一组数中的极差,问你这个怎样分组才能使得数组的极差和最大 解题思路: 可以分成 4种情况讨论 dp[i]  表示前 i+1项能得到的最大值 状态                                       状态转移方程 a[i-1] < a[i]  < a[i+1]        dp[i] = dp[i-1] + a[i+1] - a[i] a[i-1] > a[i]  < a[i+1]        dp

Codeforces 484(#276 Div 1) B Maximum Value 筛法

题意:给你一个数组,问你其中 对于  1 <= i,j <= n  ai > aj  中  ai % aj 的最大值是多少 解题思路:筛法求每个数的倍数 ,并找到数组中存在的在它左边离这个倍数最近的树(可以预处理出来) 解题代码: 1 // Author: darkdream 2 // Created Time: 2014年11月06日 星期四 00时24分10秒 3 4 #include<vector> 5 #include<list> 6 #include&l

Codeforces Round #276 (Div. 1)

Codeforces 484 A. Bits 做题感悟:这题不难,是一个构造题,找一下规律就好. 解题思路: 假如两个数的二进制位数分别是 a ,b.(这里假设 a < b)  , 当 b - a >= 1 时只有两种情况可以选择 (1 << b) - 1  or  (1<<a) -1  ,这里当然先判断前一个是否满足,当 a = b 的时候,枚举两个数的每一位,如果出现小的数当前位为 0 ,且大的数当前位为 1 ,那么也有两种情况选择要么当前位加上后面的所有位都为 1

C. Bits (Codeforces Round #276 (Div. 2) )

题目大意:给你两个数l,r(l<r),求一个数是大于等于l且小于等于r的数中二进制数的1的个数最多,如果1的个数相同则取最小的那个(翻译渣,请见谅!) 思路:把左区间L化为二进制,再把左区间的二进制的从最小位开始,每位变为1,因为这是在当前1的个数中最小的且大于L的.条件是小于等于右区间R. 代码: 1 #include <iostream> 2 #include <cstdio> 3 #include <cstdlib> 4 #include <stdio

Codeforces Round #276 (Div. 1)Bits

题意就是给你一个区间[l,r],求这个区间中化成二进制形式1最多的数,如果有多解输出最小值. 贪心即可,把l化为二进制,把最右边不是0的变成1. 例如 19 30 10011 11110 第一步 10011-->10111 第二步 10111-->11111大于30退出循环 答案即是10111 #include <cstdio> #include <cstring> #include <iostream> using namespace std; int m

Codeforces Round #276 (Div. 1)D.Kindergarten DP贪心

D. Kindergarten In a kindergarten, the children are being divided into groups. The teacher put the children in a line and associated each child with his or her integer charisma value. Each child should go to exactly one group. Each group should be a

Codeforces Round #276 (Div. 1)Maximum Value

题意很好理解,就是让你搞到两个数a[i],a[j]使得a[i]>a[j]且a[i]%a[j]最大,然后把最大值输出来. 然后,我就开始乱搞了,时间复杂度有点高,O(n*sqrt(max(a[i])); 很容易得出一个结论 如果a[i]>a[j]且a[i]/p==a[j]/p那么a[j]%p>a[j]%p. 那么就开始乱搞了枚举p,如果全部枚举了复杂度就变成O(n*max(a[i]))了. 我们可以只枚举p*p<a[i]的部分,剩下的肯定是连续的1.2.3.4...p.语文不好,不知