An easy problem (位运算)
【题目描述】
给出一个整数,输出比其大的第一个数,要求输出的数二进制表示和原数二进制表示下1的个数相同。
【题目链接】
http://noi.openjudge.cn/ch0406/1455/
【算法】
1、自己想的:设原数为n,从lowbit(n)开始左移找到第一个0的位置,同时记录该位置之前1的个数,将该位置置1,然后把1全堆在最后;如果找不到该位置,则该数是形如111100000...的样式,故将其左移一位,再把1堆在最后。感觉不够清晰。
2、借鉴网上题解,比我清晰很多:直接给原数加上lowbit(n),再把1堆在最后,结束。。。而且堆在最后也可以简洁的用位运算:(n^(n+lowbit(n)))/lowbit(n)>>2(原来lowbit(n)前有x个1,异或之后有x+1个1,应该堆x-1个1,所以右移两位)。。。不过用时都是2ms。。。时间都耗在cin上了吧。。。。
【代码1】
#include <bits/stdc++.h>
using namespace std;
int a,b,rec,num,ans;
int main()
{
while(cin>>a&&a) {
rec=num=;
b=a&-a;
while(b<=a&&!rec) {
if(!(a&b)) rec=b;
else num++;
b<<=;
}
num--;
if(!rec) {
ans=b+(<<num)-;
}
else {
rec=-rec;
ans=a&rec;
ans+=(-rec);
ans+=(<<num)-;
}
cout<<ans<<endl;
}
return ;
}
【代码2】
#include <bits/stdc++.h>
using namespace std;
int a;
int main()
{
while(cin>>a&&a) {
cout<<a+(a&-a)+((a^(a+(a&-a)))/(a&-a)>>)<<endl;
}
return ;
}
An easy problem (位运算)的更多相关文章
- [POJ] 2453 An Easy Problem [位运算]
An Easy Problem Description As we known, data stored in the computers is in binary form. The probl ...
- An easy problem(位运算)
As we known, data stored in the computers is in binary form.(数据以二进制形式存储于电脑之中.)The problem we discuss ...
- Codeforces Round #716 (Div. 2), problem: (B) AND 0, Sum Big位运算思维
& -- 位运算之一,有0则0 原题链接 Problem - 1514B - Codeforces 题目 Example input 2 2 2 100000 20 output 4 2267 ...
- POJ 1152 An Easy Problem! (取模运算性质)
题目链接:POJ 1152 An Easy Problem! 题意:求一个N进制的数R.保证R能被(N-1)整除时最小的N. 第一反应是暴力.N的大小0到62.发现当中将N进制话成10进制时,数据会溢 ...
- ACM: FZU 2105 Digits Count - 位运算的线段树【黑科技福利】
FZU 2105 Digits Count Time Limit:10000MS Memory Limit:262144KB 64bit IO Format:%I64d & ...
- 一本通 1223:An Easy Problem
\[传送门qwq\] [题目描述] 给定一个正整数N,求最小的.比N大的正整数M,使得M与N的二进制表示中有相同数目的1. 举个例子,假如给定的N为78,其二进制表示为1001110,包含4个1,那么 ...
- Gym 100818I Olympic Parade(位运算)
Olympic Parade http://acm.hust.edu.cn/vjudge/contest/view.action?cid=101594#problem/I [题意]: 给出N个数,找出 ...
- acm位运算应用 搜索
acm位运算应用 搜索 搜索 此处不讲题目,只讲位运算是怎样在这些题中实现和应用的.由于搜索题往往是基于对状态的操作,位运算往往特别有效,优化之后的效果可以有目共睹. 例1.POJ 132 ...
- POJ 2531 Network Saboteur 位运算子集枚举
题目: http://poj.org/problem?id=2531 这个题虽然是个最大割问题,但是分到dfs里了,因为节点数较少.. 我试着位运算枚举了一下,开始超时了,剪了下枝,1079MS过了. ...
随机推荐
- dotnet ef执行报错, VS 2019发布时配置项中的Entity Framework迁移项显示不出来
VS 2019发布时配置项中的Entity Framework迁移项显示不出来 dotnet ef dbcontext list --json “无法执行,因为找不到指定的命令或文件.可能的原因包括: ...
- 学Python的第五天
最近忙着学MySQL,但是小编也不会放弃学Python!!! 因为热爱所以学习~ 好了各位,进入正题,由于时间问题今天学的不是很多.... #!/usr/bin/env python # -*- co ...
- Linux telnet、nc、ping监测状态
在工作中会遇到网络出现闪断丢包的情况,最终影响业务工常使用.可以业务服务器上发起监测. 1.通过telnet echo -e "\n" | telnet localhost 2 ...
- bzoj2325 [ZJOI2011]道馆之战 树链剖分+DP+类线段树最大字段和
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=2325 题解 可以参考线段树动态维护最大子段和的做法. 对于线段树上每个节点 \(o\),维护 ...
- pspice建立仿真模型元件库
摘自:http://royroyyy.blog.163.com/blog/static/1376506172011026102216175/ PSpice9.2电子元器件模型--由网页下载的model ...
- Pycharn破解补丁激活
Pycharn破解补丁激活 到期时间: 1. 下载 https://pan.baidu.com/s/1mcQM8CLUnweY02ahKEr4PQ 并将 JetbrainsCrack-release ...
- AMROC可视化
备注 通过修改Filetype来改变输出数据的类型. hdf2tab.sh转换全部数据文件 hdf2tab.sh -m多维数据 <!DOCTYPE html PUBLIC "-//W3 ...
- orm中 如何模糊匹配某一年的用户和某一事时间段的用户
导入Q查询
- 【CF1243B2】Character Swap (Hard Version)【思维】
题意:给定两个字符串,问是否存在交换方案使得两个字符串相同,方案为交换次数小于等于2n,且每次只交换s1与s2中的一个字符 题解:考虑从前往后枚举,当第i位不同时,考虑找后边的第j位,若存在这样的第j ...
- 回归平方和 ESS,残差平方和 RSS,总体平方和 TSS
https://zhidao.baidu.com/question/565190261749684764.html 回归平方和 ESS,残差平方和 RSS,总体平方和 TSS 总变差 ...