Codeforces Round #554 (Div. 2) B. Neko Performs Cat Furrier Transform(思维题+log2求解二进制位数的小技巧)
题意:
给出一个数x,有两个操作:
①:x ^= 2k-1;
②:x++;
每次操作都是从①开始,紧接着是②
①②操作循环进行,问经过多少步操作后,x可以变为2p-1的格式?
最多操作40次,输出操作数和所有操作中步骤①的操作数的k;
我的思路:
操作①每次都是异或 (k-1) 个1;
我们最终的结果是将 x 变为(p-1)个1;
那么,我们只要每次异或操作都将x中最高的0位变为1;
因为x最多只有20位,所以,完全可以在40个操作内将x变为(p-1)个1;
例如:
7654321(位置)
(1001011)2
①第一步,找到最后一个0的位置6,异或(1<<6)-1
(1001011)^( 111111)=(1110100)
(1110100)+1=(1110101)
接着查找最后一个0的位置4(重复步骤①),异或(1<<4)-1
(1110101)^(1111)=(1111010)
(1111010)+1=(1111011)
接着执行步骤①②,直到满足条件 (有可能不执行x++操作)
AC代码:
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std; int x;
int a[]; int F()
{
for(int i=(int)log2(x);i >= ;--i)
if(!((<<i)&x))
return i+;
}
void Solve()
{
//need=x的二进制中0变为1对应的10进制数
//例如:x=(1010),need=(1111)
int need=pow(,(int)log2(x)+)-;
int ans=;
while(x != need)
{
int k=F();//x的k-1位置为最高位的0(从0开始)
a[++ans]=k;
x ^= (<<k)-;//将最高位的0变为1
if(x == need)
break;
ans++;
x++;
}
printf("%d\n",ans);
for(int i=;i <= ans;i+=)
printf("%d ",a[i]);
}
int main()
{
scanf("%d",&x);
Solve(); return ;
}
有关log2(x)求解x转化为二进制位数的小技巧:
这里要手动艾特我家小花猪,要不然,我还不知道,还有这操作呢QWQ;
一直以来,求解十进制数x转化为二进制数的位数我都是这么操作的:
int x;
cin>>x;
int tot=;
for(;!((<<tot)&x);tot--);
cout<<"共"<<tot+<<"位\n";
第四行for()代码,完全可以用个公式一行搞定:
tot=log2(x)+1;
来,分析一下:
假设log2(x)=y;
如果x为2的幂,假设x=2k,那么,y=k;
反之,即2k < x < 2k+1,y = k;
不管如何,x转化成二进制的位数为 k+1 位,即 log2(x)+1 位;
Codeforces Round #554 (Div. 2) B. Neko Performs Cat Furrier Transform(思维题+log2求解二进制位数的小技巧)的更多相关文章
- Codeforces Round #554 (Div. 2) 1152B. Neko Performs Cat Furrier Transform
学了这么久,来打一次CF看看自己学的怎么样吧 too young too simple 1152B. Neko Performs Cat Furrier Transform 题目链接:"ht ...
- Neko Performs Cat Furrier Transform CodeForces - 1152B 二进制思维题
Neko Performs Cat Furrier TransformCodeForces - 1152B 题目大意:给你一个x,在40步操作以内把x变成2m−1,m为非负整数.对于每步操作,奇数步可 ...
- Codeforces Round #554 (Div. 2) 1152A - Neko Finds Grapes
学了这么久,来打一次CF看看自己学的怎么样吧 too young too simple 1152A - Neko Finds Grapes 题目链接:"https://codeforces. ...
- Codeforces Round #554 (Div. 2) C. Neko does Maths (简单推导)
题目:http://codeforces.com/contest/1152/problem/C 题意:给你a,b, 你可以找任意一个k 算出a+k,b+k的最小公倍数,让最小公倍数尽量小,求出 ...
- Codeforces Round #554 (Div. 2) C.Neko does Maths (gcd的运用)
题目链接:https://codeforces.com/contest/1152/problem/C 题目大意:给定两个正整数a,b,其中(1<=a,b<=1e9),求一个正整数k(0&l ...
- Codeforces Round #554 (Div. 2) C. Neko does Maths(数学+GCD)
传送门 题意: 给出两个整数a,b: 求解使得LCM(a+k,b+k)最小的k,如果有多个k使得LCM()最小,输出最小的k: 思路: 刚开始推了好半天公式,一顿xjb乱操作: 后来,看了一下题解,看 ...
- Codeforces Round #554 (Div. 2) C. Neko does Maths (数论 GCD(a,b) = GCD(a,b-a))
传送门 •题意 给出两个正整数 a,b: 求解 k ,使得 LCM(a+k,b+k) 最小,如果有多个 k 使得 LCM() 最小,输出最小的k: •思路 时隔很久,又重新做这个题 温故果然可以知新❤ ...
- Codeforces Round #554 (Div. 2) E Neko and Flashback (欧拉路径 邻接表实现(当前弧优化..))
就是一欧拉路径 贴出邻接表欧拉路径 CODE #include <bits/stdc++.h> using namespace std; const int MAXN = 100005; ...
- Codeforces Round #554 (Div. 2) F2. Neko Rules the Catniverse (Large Version) (矩阵快速幂 状压DP)
题意 有nnn个点,每个点只能走到编号在[1,min(n+m,1)][1,min(n+m,1)][1,min(n+m,1)]范围内的点.求路径长度恰好为kkk的简单路径(一个点最多走一次)数. 1≤n ...
随机推荐
- 002. https通信(CA证书认证 + 密钥商定 )
服务端与客户端建立https通信的过程: 一.认证:客户端第一次访问服务端时,要求服务端证明自己可被信任 1.证书:由服务端申请.第三方CA颁发的,存放在服务端的证书: 证书包含:服务端的公钥.服务端 ...
- Django之路由分发和反向解析
一.路由分发: 路由分发是指:总路由不再直接做路由与视图函数的对应关系,而是将获取的路由分发给下面的app去处理对应关系 from django.conf.urls import url,includ ...
- mapfile中关于栅格数据的processing项说明
mapfile是MapServer中地图的配置文件,规定了地图的源数据.投影.样式等一系列信息.用MapServer发布影像地图,需要用以下processing项设置地图的风格样式. BANDS=re ...
- UDK Stat命令
Stat命令(chs en)提供了游戏和引擎各个方面的实时统计信息,输入不同参数会在屏幕HUD上显示对应统计数据. 非Shipping版的UDK才会启用STATS宏,统计逻辑才会编译进exe,才能使 ...
- d3js scales深入理解
转自:https://www.cnblogs.com/kidsitcn/p/7182274.html 比例尺函数是这样的javascript函数: 接收通常是数字,日期,类别等data输入并且: 返回 ...
- SqlServer如何给表添加新的字段以及字段注释
语法: USE 数据库名ALTER TABLE 表名 ADD 字段名 类型 默认值 是否为空;EXEC sp_addextendedproperty N'MS_Description', N'注 ...
- 【spring源码分析】IOC容器初始化(四)
前言:在[spring源码分析]IOC容器初始化(三)中已经分析了BeanDefinition注册之前的一些准备工作,下面将进入BeanDefinition注册的核心流程. //DefaultBean ...
- python崩溃到现在居然还没有放弃的Day07
今天新入一个全新的知识面,叫做深浅拷贝,拷贝英文名copy,俗称复制,作为一个火影迷就会想到拷贝忍者旗木卡卡西,跑题了,在所有的数据存储时,都会有内存地址和存储地址,浅拷贝只拷贝第一层的内存地址,深拷 ...
- 看AppCan移动管理平台如何助力企业移动化
AppCan企业移动管理平台(EMM)是为企业移动化战略提供综合管理的平台产品.AppCan EM移动管理平台为企业提供对用户.应用.设备.内容.邮件的综合管理服务,并在此基础上为企业提供统一应用商店 ...
- vpshere6 ESXI 禁止登陆 "执行此操作的权限被拒绝"
vCenter在添加ESXI主机时,锁定模式选择“正常”,导致无法直接登陆ESXI宿主机,现象如下: 解决方法: