【贪心】【模拟】HDU 5491 The Next (2015 ACM/ICPC Asia Regional Hefei Online)
来源:互联网 发布:windows软件性能测试 编辑:程序博客网 时间:2024/05/16 11:18
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=5491
题目大意:
一个数D(0<=D<231),求比D大的第一个满足:二进制下1个个数在[s1,s2]范围内。D已经满足[s1,s2]。
题目思路:
【贪心】【模拟】
首先将这个数转成二进制统计总共1的个数s,再求出末尾连续0和1的个数n0,n1。
如果最后一位是0:
s=s2,那么为了保证s<s2且答案>D,先设ans=d+lowbit(d),此时满足了新的s<s2且答案>D,但这时有可能s<s1,需要从最低位开始补1。
s<s2,那么ans=n+1为答案。
如果最后一位是1:先ans=n+1在看新的s(s只减不增)
s<s1,那么从最低位开始补1。
否则,ans即为答案
////by coolxxx//#include<bits/stdc++.h>#include<iostream>#include<algorithm>#include<string>#include<iomanip>#include<map>#include<stack>#include<queue>#include<set>#include<bitset>#include<memory.h>#include<time.h>#include<stdio.h>#include<stdlib.h>#include<string.h>//#include<stdbool.h>#include<math.h>#define min(a,b) ((a)<(b)?(a):(b))#define max(a,b) ((a)>(b)?(a):(b))#define abs(a) ((a)>0?(a):(-(a)))#define lowbit(a) (a&(-a))#define sqr(a) ((a)*(a))#define swap(a,b) ((a)^=(b),(b)^=(a),(a)^=(b))#define mem(a,b) memset(a,b,sizeof(a))#define eps (1e-8)#define J 10000#define mod 1000000007#define MAX 0x7f7f7f7f#define PI 3.14159265358979323#define N 44using namespace std;typedef long long LL;int cas,cass;int n,m,lll,ans;LL aans;LL e[N];int a[N];int s,s1,s2,n0,n1;void init(){int i;e[0]=1;for(i=1;i<32;i++)e[i]=e[i-1]<<1;}int main(){#ifndef ONLINE_JUDGE//freopen("1.txt","r",stdin);//freopen("2.txt","w",stdout);#endifint i,j,k;init();//for(scanf("%d",&cass);cass;cass--)for(scanf("%d",&cas),cass=1;cass<=cas;cass++)//while(~scanf("%s",s+1))//while(~scanf("%d",&n)){scanf("%d%d%d",&n,&s1,&s2);s=n1=n0=0;mem(a,0);m=n;if(n==0)a[0]=1;while(m){a[++a[0]]=m&1;s+=m&1;m>>=1;}if(a[1]==0){for(i=1;i<=a[0] && a[i]==0;i++)n0++;for(;i<=a[0] && a[i]==1;i++)n1++;if(n0){if(s==s2){aans=1LL*n+lowbit(n);s=s+1-n1;n0+=n1;if(s<s1){for(i=0;i<s1-s;i++)aans+=e[i];}}else{aans=1LL+n;}}}else{for(i=1;i<=a[0] && a[i]==1;i++)n1++;for(;i<=a[0] && a[i]==0;i++)n0++;s=s+1-n1;aans=1LL+n;if(s<s1){for(i=0;i<s1-s;i++)aans+=e[i];}}printf("Case #%d: %lld\n",cass,aans);}return 0;}/*////*/
0 0
- 【贪心】【模拟】HDU 5491 The Next (2015 ACM/ICPC Asia Regional Hefei Online)
- HDU 5491 The next(2015 ACM/ICPC Asia Regional Hefei Online )(贪心)
- HDU 5491 The Next 构造(2015 ACM/ICPC Asia Regional Hefei Online)
- 【HDU】5491 The Next(2015 ACM/ICPC Asia Regional Hefei Online)
- HDU 5491.The Next【2015 ACM/ICPC Asia Regional Hefei Online】【方法】【9月30】
- HDU 5491 The Next 2015 ACM/ICPC Asia Regional Hefei Online1008
- HDU 5493 Queue(2015 ACM/ICPC Asia Regional Hefei Online)
- 2015 ACM/ICPC Asia Regional Hefei Online
- HDU 5491 The Next(表示我的方法比较暴力,但需要考虑的东西比较少)——2015 ACM/ICPC Asia Regional Hefei Online
- 2015 ACM/ICPC Asia Regional Hefei Online J.Queue
- HDU 5492 Find a path DP —— 2015 ACM-ICPC Asia Regional Hefei Online
- HDU 5492 Find a path(DP)——2015 ACM/ICPC Asia Regional Hefei Online
- HDU 5492 Find a path(2015 ACM/ICPC Asia Regional Hefei Online )
- HDU 5493 Queue(2015 ACM/ICPC Asia Regional Hefei Online )
- HDU 5492 Find a path DP —— 2015 ACM-ICPC Asia Regional Hefei Online
- 【HDU】5492 Find a path(2015 ACM/ICPC Asia Regional Hefei Online)
- 【HDU】5489 Removed Interval(2015 ACM/ICPC Asia Regional Hefei Online)
- 【HDU】5493 Queue(2015 ACM/ICPC Asia Regional Hefei Online)
- OpenCV中Mat的type
- Python GUI设计 PythonWx
- hihocoder #1362 : 修补木桶(二分+dp)
- SHA1算法实现及详解
- POJ-5353-Fence Repair(哈夫曼问题->贪心(一种解法两种做法))
- 【贪心】【模拟】HDU 5491 The Next (2015 ACM/ICPC Asia Regional Hefei Online)
- android 获取手机型号
- Haffman 编码
- angularjs+bootstrap+SpringMVC+Spring+mybatis+maven--ui.router路由一
- (12)HTML5-键盘按键事件监听
- Android WebView加载TTF字体
- JSP页面接收数据的方法
- Notification通知、普通通知、大视图通知、进度条通知, 子线程可以操作时度条、流动进度条通知、自定义通知
- ANSI 控制码