hdu_5969_最大的位或(贪心)】的更多相关文章

题目链接:hdu_5969_最大的位或 题意: 中文,还是自己看 题解: xjb贪心一下就行了 #include<bits/stdc++.h> #define F(i,a,b) for(int i=a;i<=b;i++) using namespace std; typedef unsigned long long ll; int t; ll a,b; ],ditb[],eda,edb; int main() { scanf("%d",&t); while(t…
Problem Description B君和G君聊天的时候想到了如下的问题.给定自然数l和r ,选取2个整数x,y满足l <= x <= y <= r ,使得x|y最大.其中|表示按位或,即C. C++. Java中的|运算.   Input 包含至多10001组测试数据.第一行有一个正整数,表示数据的组数.接下来每一行表示一组数据,包含两个整数l,r.保证 0 <= l <= r <= 1018.   Output 对于每组数据输出一行,表示最大的位或. 题目是中文…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5969 最大的位或 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 1801    Accepted Submission(s): 678 Problem Description B君和G君聊天的时候想到了如下的问题. 给定自然数l和r ,选…
最大的位或 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem Description B君和G君聊天的时候想到了如下的问题.给定自然数l和r ,选取2个整数x,y满足l <= x <= y <= r ,使得x|y最大.其中|表示按位或,即C. C++. Java中的|运算.   Input 包含至多10001组测试数据.第一行有一个正整数,表示数据的组数.…
题目 B君和G君聊天的时候想到了如下的问题. 给定自然数l和r ,选取2个整数x,y满足l <= x <= y <= r ,使得x|y最大. 其中|表示按位或,即C. C++. Java中的|运算. Input 包含至多10001组测试数据. 第一行有一个正整数,表示数据的组数. 接下来每一行表示一组数据,包含两个整数l,r. 保证 0 <= l <= r <= 1018. Output 对于每组数据输出一行,表示最大的位或. Sample Input 51 100 1…
HDU 5969 最大的位或 题目大意 B君和G君聊天的时候想到了如下的问题. 给定自然数\(l\)和\(r\) ,选取\(2\)个整数\(x,y\)满足\(l <= x <= y <= r\),使得\(x|y\)最大. \(0 <= l <= r <= 10181018\) solution 你看那数据范围,是不是像极了\(TLE\) 又是玄学贪心 异或最大,那么就尽可能让每一位上都是1,按照这个策略贪心即可,注意long long #include<cstdi…
链接 最大的位或 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 3589 Accepted Submission(s): 1369 Problem Description B君和G君聊天的时候想到了如下的问题. 给定自然数l和r ,选取2个整数x,y满足l <= x <= y <= r ,使得x|y最大. 其中|表示按位或,即C.…
题目内容 Vjudge链接 给出一个闭区间,找该区间内两个数,使这两个数的按位或最大. 输入格式 包含至多\(10001\)组测试数据. 第一行有一个正整数,表示数据的组数. 接下来每一行表示一组数据,包含两个整数\(l,r\). 保证$ 0\le l\le r\le 10^{18}$. 输出格式 对于每组数据输出一行,表示最大的位或. 样例输入 5 1 10 0 1 1023 1024 233 322 1000000000000000000 1000000000000000000 样例输出 1…
HDU-5969:http://acm.hdu.edu.cn/showproblem.php?pid=5969 一开始也是分了类,觉得要两种情况,l 与 r 位数相同与不同的情况,仔细想一下,可以一起处理,从最高位(左侧符号位)开始,遇到不同后面全部补1即可. 刚写好交信心满满,一交就Wrong answer,写了一个暴力求 的对数器,确定算法是对的,也知道了问题在哪. 第一,数据相同时,没有结果,要处理. 第二,碰到不同后,将 r 后面的全部置1: r = r | (t << s); 一开始…
对于右端点r和左端点l,考虑他们的二进制位从高到低,直到第一位不同的为止. 更高的都取成相同的,更低的都取成1. 比如 101011110001 101011101001 101011111111 #include<cstdio> using namespace std; typedef long long ll; int T; ll l,r; int main(){ scanf("%d",&T); for(;T;--T){ scanf("%I64d%I6…