博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
模拟+位运算 HDOJ 5491 The Next
阅读量:7113 次
发布时间:2019-06-28

本文共 1508 字,大约阅读时间需要 5 分钟。

 

题意:意思很简单,找一个最接近D且比D大的数,满足它的二进制表示下的1的个数在[S1, S2]之间

分析:从D + 1开始,若个数小于S1,那么从低位向高位把0替换成1直到S1就是最小值,否则往更大的数去找,此时目标是减少1的数量,可以优化, +lowbit (D),因为+小于lowbit (D)只会增加1的数量。这题比赛时队友想的很复杂,方法不够简单暴力。

 

/************************************************* Author        :Running_Time* Created Time  :2015/9/28 星期一 09:19:08* File Name     :H.cpp ************************************************/#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define lson l, mid, rt << 1#define rson mid + 1, r, rt << 1 | 1typedef long long ll;const int N = 1e5 + 10;const int INF = 0x3f3f3f3f;const int MOD = 1e9 + 7;const double EPS = 1e-8;int b[64];int low_bit(int i) { return i & (-i);}int main(void) { int T, cas = 0; scanf ("%d", &T); while (T--) { int S1, S2; ll D; scanf ("%I64d%d%d", &D, &S1, &S2); memset (b, 0, sizeof (b)); int n = 0, j = 0; D++; do { ll tmp = D; j = 0; n = 0; while (tmp) { if (tmp & 1) { b[j++] = 1; n++; } else b[j++] = 0; tmp >>= 1; } if (n < S1) { int add = S1 - n; j = 0; while (add) { if (!b[j]) b[j] = 1, add--; j++; } break; } else D += low_bit (D); }while (n < S1 || n > S2); ll ans = 0, x = 1; for (int i=0; i<64; ++i) { if (b[i]) ans += x; x <<= 1; } printf ("Case #%d: %I64d\n", ++cas, ans); } return 0;}

  

转载于:https://www.cnblogs.com/Running-Time/p/4844374.html

你可能感兴趣的文章
ORACLE函数大全(CSDN)
查看>>
json概念
查看>>
MVC使用Gantt Chart实现甘特图,管理事情进度
查看>>
FIREDAC字段类型映射
查看>>
Visual studio 2019 preview & C# 8 initial experience
查看>>
Delphi XE中String、ANSIString、TBytes之间的转换
查看>>
《ASP.NET AJAX程序设计 I、II、III卷》的新封面效果
查看>>
八款开源 Android 游戏引擎 (巨好的资源)
查看>>
JQuery实现全选、取消全选、反向选择
查看>>
关于重写equals,hashcode以及compareTo方法!
查看>>
iPhone游戏编程实例:分享成功游戏开发人员的锦囊妙计
查看>>
POJ 3744 Scout YYF I(概率+矩阵)
查看>>
Fluent NHibernate and Mysql,SQLite,PostgreSQL
查看>>
外部排序
查看>>
CComObject 。。。(转)
查看>>
lucene的基本查询及lucene3.0.1API
查看>>
firefox 对相对定位的TD元素渲染错误
查看>>
selenium Chromediver
查看>>
Netflix Zuul 了解
查看>>
磁盘格式化
查看>>