传送门

题意:

  给出一个数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求解二进制位数的小技巧)的更多相关文章

  1. Codeforces Round #554 (Div. 2) 1152B. Neko Performs Cat Furrier Transform

    学了这么久,来打一次CF看看自己学的怎么样吧 too young too simple 1152B. Neko Performs Cat Furrier Transform 题目链接:"ht ...

  2. Neko Performs Cat Furrier Transform CodeForces - 1152B 二进制思维题

    Neko Performs Cat Furrier TransformCodeForces - 1152B 题目大意:给你一个x,在40步操作以内把x变成2m−1,m为非负整数.对于每步操作,奇数步可 ...

  3. Codeforces Round #554 (Div. 2) 1152A - Neko Finds Grapes

    学了这么久,来打一次CF看看自己学的怎么样吧 too young too simple 1152A - Neko Finds Grapes 题目链接:"https://codeforces. ...

  4. Codeforces Round #554 (Div. 2) C. Neko does Maths (简单推导)

    题目:http://codeforces.com/contest/1152/problem/C 题意:给你a,b, 你可以找任意一个k     算出a+k,b+k的最小公倍数,让最小公倍数尽量小,求出 ...

  5. 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 ...

  6. Codeforces Round #554 (Div. 2) C. Neko does Maths(数学+GCD)

    传送门 题意: 给出两个整数a,b: 求解使得LCM(a+k,b+k)最小的k,如果有多个k使得LCM()最小,输出最小的k: 思路: 刚开始推了好半天公式,一顿xjb乱操作: 后来,看了一下题解,看 ...

  7. 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: •思路 时隔很久,又重新做这个题 温故果然可以知新❤ ...

  8. Codeforces Round #554 (Div. 2) E Neko and Flashback (欧拉路径 邻接表实现(当前弧优化..))

    就是一欧拉路径 贴出邻接表欧拉路径 CODE #include <bits/stdc++.h> using namespace std; const int MAXN = 100005; ...

  9. 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 ...

随机推荐

  1. maven+springMVC(二)

    [目录]

  2. .Net Core3 新特性/新功能 16条

    .net core 3实现了.net 标准2.1. 1.生成可执行文件 以前版本需要dotnet run运行项目,.net core 3支持直接生成目标平台的可执行文件.比如windows就是exe了 ...

  3. 阿里云服务器,Sql Server 本地连接服务器端问题记录

    1.如果你是阿里云服务器,配置参数都整好了并且排除了防火墙问题(关闭了防火墙),依然没有连接上,那就先考虑这个问题 问题:阿里云服务器的SQLServer不允许远程连接 原因:因为除了服务器上的防火墙 ...

  4. win10安装spacemacs

    参考: https://www.cnblogs.com/e190/p/10404927.html https://blog.csdn.net/u011729865/article/details/54 ...

  5. RIPng(第三组)

    一.实验拓扑 2.地址规划 3.实验配置 1)配置各个路由器的端口地址,PC端地址采用自动配置 如本处的PC0,自动获取IPV6地址 2)配置RIP a.现在路由器开启RIP:ipv6 router ...

  6. P1177 【模板】快速排序 题解

    本质为sort,这里我们用优先队列(堆)解决. 什么是堆? 堆 堆是一个完全二叉树,而且是每层都有规律的二叉树 规律大概是: 小根堆:最上层数的大小最小,往下每层结点都比父亲结点大,比两个儿子结点小 ...

  7. libgdx学习记录2——文字显示BitmapFont

    libgdx对中文支持不是太好,主要通过Hireo和ttf字库两种方式实现.本文简单介绍最基本的bitmapfont的用法. 代码如下: package com.fxb.newtest; import ...

  8. photoshop出现错误:要求96和8之间的整数。已插入最接近的数值

    win10升级后出现该问题.我用的是ps cc2014 解决办法:修改注册表 计算机\HKEY_CURRENT_USER\Software\Adobe\Photoshop\80 新建的是DWORD(3 ...

  9. icpc南宁站赛后总结

    11月24号,我们经过26个小时的火车来到了广西南宁,一场漫长的过程. 24号晚到达南宁,做地铁到达学校,找到住的地方,南宁的天真是让人无奈. 25号,上午去广西大学体育馆报道,然后回去好好整理了一下 ...

  10. Python----数据预处理

    导入标准库 import numpy as np import matplotlib.pyplot as plt import pandas as pd 导入数据集 dataset = pd.read ...