贪心——HDU-5969 最大的位或
2024-10-19 08:57:41
HDU-5969:http://acm.hdu.edu.cn/showproblem.php?pid=5969
一开始也是分了类,觉得要两种情况,l 与 r 位数相同与不同的情况,仔细想一下,可以一起处理,从最高位(左侧符号位)开始,遇到不同后面全部补1即可。
刚写好交信心满满,一交就Wrong answer,写了一个暴力求 的对数器,确定算法是对的,也知道了问题在哪。
- 第一,数据相同时,没有结果,要处理。
- 第二,碰到不同后,将 r 后面的全部置1:
r = r | (t << s);
一开始 写的是 r = r | (1 << s); 我用了1,1默认是int,左移超过31,就超范围了。
#include <iostream> using namespace std;
typedef long long ll; int main() {
ll l, r,t=;
int N;
cin >> N;
while (N--) {
while (cin >> l >> r) {
int s = ;
if (l == r) {
cout << l << endl;
continue;
}
if (l > r)swap(l, r);
while (((l >> s) & ) == ((r >> s) & )) {
s--;
}
while (s--) {
r = r | (t << s);
}
cout << r << endl;
}
}
return ;
}
心得:贪心法,找普遍规律,处理特殊数据,不要老想知道为什么这样解,用暴力法检验算法的正确性,算法的证明是数学家的事。
最新文章
- 简单实用的Log4net帮助类
- PHP 图片处理工具类(添加水印与生成缩略图)
- Hadoop学习18--yarn配置篇-基本配置节点
- ORA-16179: incremental changes to ";log_archive_dest_1"; not allowed with SPFILE
- Makefile文件简单整理
- Java Socket 基础例子
- 代码修改mysql字符
- 强大的字符串格式化函数 - format
- java 反射,注解,泛型,内省(高级知识点)
- Android中进程生命周期的优先级
- float
- 使用chrome开发者工具中的network面板测量网站网络性能
- 编译部署mysql5.7.13
- SQL 查看表字段及说明
- Fiddler查看接口响应时间
- BootStrap学习(4)_分页&;标签&;缩略图&;警告&;进度条
- 使用Android拨打电话功能
- COBOL和C#比较
- java中获取系统变量
- 后台登陆功能的实现 SESSION