HDU 5491 The Next
Problem Description Let L denote the number of 1s in integer D’s binary representation. Given two integers S1 and S2, we call D a WYH number if S1≤L≤S2.
With a given D, we would like to find the next WYH number Y, which is JUST larger than D. In other words, Y is the smallest WYH number among the numbers larger than D. Please write a program to solve this problem. Input The first line of input contains a number T indicating the number of test cases (T≤).
Each test case consists of three integers D, S1, and S2, as described above. It is guaranteed that ≤D< and D is a WYH number. Output For each test case, output a single line consisting of “Case #X: Y”. X is the test case number starting from . Y is the next WYH number. Sample Input Sample Output Case #:
Case #:
Case #: Source ACM/ICPC Asia Regional Hefei Online
这道题在比赛的时候我就是用的这个方法,但是一直超时。后来重新写了一遍,用了G++过了。
思路:
从小到大找必定超,我看限制条件一的个数是0~32差不多,这么个循环是不会超时的。我就从i->s1~s2循环,里面找一的个数为i的。
这里因为要i个1,然后又要比L大那么把第i个1前移一位。
下面这里分两个情况:
以需要3个1为例
①11011->11100
②10111->11001如果进位了,就在末尾补1.
还有一种情况就是找不到第i个1:就从后往前变0为1,直到满足i个1.
然后去每种1个数的最小值。
证明正确性:
试想要i个1那么不够的话还要比他大是不是往后补就行,因为1放在越后面越小。
要是够,因为要比他大,这里可知1的个数比需要的多。我们就要删掉1,那么删哪些呢?到第i个1为止,你后面在怎么变①后面1变少,数值变小,不行②1变多,我们现在要删掉1,不行;
所以后面的都不行,那么第i个1要进位了。然后进位完,1不够了,最小就往最后面补。
#include<stdio.h>
int main()
{
int T,s1,s2;
__int64 L,p;
int cas=; scanf("%d",&T);
while(T--)
{
scanf("%I64d%d%d",&L,&s1,&s2);
p=(__int64)<<; if(L==&&s1==&&s2==){
printf("Case #%d: 0\n",++cas);
continue;
}
int flag=;
__int64 t;
for(int i=s1;i<=s2;i++)
{
int s=,f=;
t=(__int64);
for(int j=;j>=;j--)
{
if(L&((__int64)<<j))s++;
if(s==i)
{
int z,k;
for(k=j;k<=;k++)
{if(L&((__int64)<<k));
else {
t|=(__int64)<<k;
break;
}
} z=;
for(int kk=k+;kk<=;kk++)
{
if(L&((__int64)<<kk))t|=(__int64)<<kk,z++;
}
z=i-z;
for(k=;k<=&&z>;k++)t|=(__int64)<<k,z--;
p=p>t?t:p; f=;
break;
}
}
if(!f)
{
s=i-s;
t=L;
for(int k=;k<=&&s>;k++){
if(L&((__int64)<<k));
else t|=(__int64)<<k,s--;
}
p=p>t?t:p; } }
printf("Case #%d: %I64d\n",++cas,p);
}
}
HDU 5491 The Next的更多相关文章
- hdu 5491 The Next (位运算)
http://acm.hdu.edu.cn/showproblem.php?pid=5491 题目大意:给定一个数D,它的二进制数中1的个数为L,求比D大的数的最小值x且x的二进制数中1的个数num满 ...
- 【贪心】【模拟】HDU 5491 The Next (2015 ACM/ICPC Asia Regional Hefei Online)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5491 题目大意: 一个数D(0<=D<231),求比D大的第一个满足:二进制下1个个数在 ...
- hdu 5491(2015合肥网赛)The Next
题目;http://acm.hdu.edu.cn/showproblem.php?pid=5491 题意就是,T组测试数据.然后L,S1,S2.L的二进制中有x个1,x满足 S1<=x< ...
- HDU 5491 The Next(位运算)
题意:已知D(0<=D<2^31).s1.s2,其中L为D转化为二进制数时1的个数,题目保证s1<=L<=s2,求一个数,满足以下条件: 1.比D大 2.转化为二进制时1的个数 ...
- hdu 5491 The Next(暴力枚举)
Problem Description Let L denote the number of 1s in integer D’s binary representation. Given two in ...
- hdu 5491(位运算)
题意:给你n,a,b. 希望得到比n大,二进制1的个数在 a ,b之间的最小的数 思路:①满足条件,输出 ②num < a 从右找到是0的最小位,变成1 ③num > b从右到左找是1的最 ...
- HDU - 5491 The Next 2015 ACM/ICPC Asia Regional Hefei Online
从D+1开始,对于一个数x,区间[x,x+lowbit(x))内的数字的二进制位上1的数量整体来说是单调不减的,因此可快速得出1在这个区间的取值范围. 每次判断一下有没有和[s1,s2]有没有交集,一 ...
- HDOJ 2111. Saving HDU 贪心 结构体排序
Saving HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 【HDU 3037】Saving Beans Lucas定理模板
http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...
随机推荐
- iOS/mac开发的一些知名个人博客
王巍的博客:王巍目前在日本横滨任职于LINE.工作内容主要进行Unity3D开发,8小时之外经常进行iOS/Mac开发.他的陈列柜中已有多款应用,其中番茄工作法工具非常棒. http://onevca ...
- SQL Server Reporting Services 自定义数据处理扩展DPE(Data Processing Extension)
最近在做SSRS项目时,遇到这么一个情形:该项目有多个数据库,每个数据库都在不同的服务器,但每个数据库所拥有的数据库对象(table/view/SPs/functions)都是一模一样的,后来结合网络 ...
- Oracle ROWNUM用法和分页查询总结(转)
[转载] Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用. Oracle分页查询格式(一):http://yangtingkun.itpub.net/post/468/100278 ...
- eclipse+tomcat+httpServlet初学
1.在eclipse中配置tomcat,参考上一边文章,建立的web项目tomcatWeb目录结构 2.添加Servlet处理类 3. 实现doGet()与doPost()方法: <span s ...
- 【原创】javascript——prototype与__proto__
一定要注意这个概念:javascript世界里,万物皆对象, function是对象,prototyp也是对象. 新建构造函数,并实例 var Person = function(){} var ...
- ASP.NET多线程下使用HttpContext.Current为null解决方案
多线程或者异步调用中如何访问HttpContext? 前面我还提到在APM模式下的异步完成回调时,访问HttpContext.Current也会返回null,那么此时该怎么办呢? 答案有二种:1. 在 ...
- 用高德地图API 通过详细地址获得经纬度
http://cloud.sinyway.com/Service/amap.html http://restapi.amap.com/v3/geocode/geo?key=xxxxxxxxxxxxxx ...
- shell 脚本执行日志通用模块
目标 实现记录SHELL执行的開始时间,结束时间.执行状态,错误信息等,以函数封装日志记录的方式,脚本调用函数 源代码 通用函数脚本program_log_new.sh function init_l ...
- iOS判断iPhone型号
链接: http://stackoverflow.com/questions/11197509/ios-how-to-get-device-make-and-modelhttp://stackover ...
- 微信支付 V3版
本人小菜鸟一仅仅.为了自我学习和交流PHP(jquery,linux,lamp,shell,javascript,server)等一系列的知识,小菜鸟创建了一个群.希望光临本博客的人能够进来交流. 寻 ...