关于BIT问题的错误
来源:互联网 发布:澳际留学 知乎 编辑:程序博客网 时间:2024/05/16 11:42
/*Description给定L,R,输出X,X在[L,R]中,且其为转化成二进制后1的总数最多的那个数(同时存在多个解,输出最小的那个)。Input第一行为询问个数n,(1<=n<=10000).接下来有n行.每行有两个数为L,R(0<=L<=R<=10^18)Output每个询问输出一个答案。Sample Input31 22 41 10Sample Output137Hint将每个数转化成二进制数:1->12->103->114->1005->10110 1010 11 10112的最高次方-1或减去其位数加一现在有三种情况, 2的counter次 就是后面除以2的i如果a在i的counter次的左边那么最小值就是i的couter次方-1了如果a大与i的counter次方,则最大值就是b*/#include <stdio.h>typedef long long ll;ll array[100];int j = 0;ll dfs(int j,ll a,ll b){ int i; for (i = 1;i <= b+1;i *= 2); i /= 2; if (a < i)return i-1; else { a -= i; b -= i; array[j] = i; j ++; return dfs(j,a,b); }}ll dfc(int j,ll a,ll b){ int i; for (i = 1;i <= b+1;i *= 2); i /= 2; if (a < i)return j; else { a -= i; b -= i; j ++; return dfc(j,a,b); }}int main(){ int n; scanf("%d",&n); //n = 10; ll a,b,i,result; while (n --){ scanf("%lld %lld",&a,&b); ll result = dfs(j,a,b); j = 0; int i; j = dfc(j,a,b); for (i = 0;i < j;i ++) result += array[i]; j = 0; printf("%lld\n",result); } return 0;}
有点难受啊,遍了一个题目,结果有这么多问题,递归函数中如何传值(我要传的是两个值)
我的算法有点点奇怪,但是,主要还是我原先那个简单问题的思考。
错误方式: 时间时 time limit
现在经过了高人指点后,我的思路又进行了优化。
#include <stdio.h>using namespace std;long long dfs(long long a,long long b){ long long i; for (i = 1;i <= b+1;i *= 2); i /= 2; // i 是以下的第一2n - 1 if (a < i)return i-1; else { int t; for (t = 1;i <= b;i += t,t *= 2); i = i - t/2; int c; t = t/2; if (i < a) for (c = t;i < a;i += c){ c /= 2; if (c == 0){ t = t/2; c = t; } } return i; }}int main(){ int t; scanf("%d",&t); while (t --){ long long a,b; scanf("%lld %lld",&a,&b); printf("%lld\n",dfs(a,b)); } return 0;}
强行一波c++这不重要。
前一部分的思路并没有变,一定是找。。。。自己想。
但是后面就有了优化。
看看多么艰辛啊,
第一部分的优化是先开始从i即(小于等于b的最大二的倍数)
但是后面我是利用递归进行深入分解,
时间就炸了,还引出了一个关于递归与全局变量的问题,
而高手是找规律,从
例子 i = 1000(二进制)
那么就从1001开始
1011
1111
寻找一个比b小的最大i
然而又是a
还得保证a<i
只能又进行奇怪的循环了
---------------------------------------------------咦?为什么我感觉我原来的方法更简单。
看来此题未解,我们还得算账。
阅读全文
0 0
- 关于BIT问题的错误
- 关于bit code的问题
- 关于vs2008 编译64bit程序的问题
- 关于mysql数据库保存bit类型数据的问题
- 关于DTD错误的问题。
- 关于指针错误的问题
- bit操作的问题
- python win7 64bit内存错误问题
- 如何解决Windows8.1(32bit&64bit)下Cisco VPN Client拔号时报442错误的问题
- 关于Cache的dirty bit
- 关于bit的插入算法
- 32bit g++编译64位整数作为key的__gnu_cxx::hash_map的编译错误问题
- 关于zbar的libzbar.a不支持ipnone5的64bit问题
- MFC 关于BMP 24bit 和 32bit的操作
- 关于SQLSERVER AGENT 错误日志的问题
- 关于tcsd_win32.exe的错误问题。
- 关于SQLSERVER AGENT 错误日志的问题
- 关于GCVS编译错误的问题
- C#中串口组件的使用方法总结及上位机制作方法
- python爬虫爬取各大直播平台的女主播图片
- 学习怎么用递归画图
- 帧同步Moba游戏相关的经验总结
- Java 线程优化
- 关于BIT问题的错误
- 计蒜客 单独的数字 位运算总结
- 使用itext转换html2pdf
- JDK学习笔记(一)
- unity从服务器下载资源并且保存到本地
- 快速开始keras 教程
- nginx的通用配置 和laravel 配置
- iOS应用程序安全(20)-本地数据存储及其安全性(NSUserDefaults, CoreData, Sqlite, Plist 文件)(转)
- <java笔记>---接口