Neko Performs Cat Furrier Transform

time limit per test 1 second
memory limit per test 256 megabytes

题目链接http://codeforces.com/problemset/problem/1152/B



emmm,题目大意:给你一个数n,让你对他进行t次操作使得它的值为2x-1,你第一次只能将它异或2x-1,第二次只能对它+1,第三次…让你求t,并输出每个x;

题目有点想法,如果对异或不太熟悉的人可能有点迷,但实际上我们可以通过第一个样例来看:

首先我们将它(39)化为二进制:100111
异或会使得相同的变为0,不相同的变为1,而2x-1化为二进制则是1111111…(x-1个)。也就是说我们异或的时候会使得x-1位及以下的反转。

那么题目的意思就是让你在二进制的数据下降n的每位变成1。

那么也就好做了,我们对n从高位一位位地找下去,如果该位置为1,则继续找,否则我们就将它异或2i+1-1(i为二进制下的第i位)。至于第二个操作就不用管了,他是固定的操作。

当然我是先将它异或了一个2p-1(p为n的二进制下的长度)。这个完全可以删掉。。

以下是AC代码:

#include <bits/stdc++.h>
using namespace std;
int ok(int x)
{while (x){if (x%2==0) return 0; x>>=1;}return 1;
}
int a[60],b[60];
int pow(int x,int y)
{int ans=1;for (int i=1; i<=y; i++)ans*=x;return ans;
}
int main()
{int n;scanf ("%d",&n);if (ok(n)){printf ("0\n");return 0;}else {int ans=0,nb=0;while (!ok(n)){ans++;int cp=n,op=0;if (ans&1) {if (ans==1){while (cp) cp>>=1,op++;n^=pow(2,op)-1;a[++nb]=op;}else {int sb;memset(b,0,sizeof(b));while (cp) b[op++]=cp%2,cp>>=1;while (!b[op]) op--;for (int i=op; i>=0; i--) if (!b[i]){sb=i+1;break;}n^=pow(2,sb)-1;a[++nb]=sb;}}else n++;}printf ("%d\n",ans);if (ans&1) for (int i=1; i<=ans/2+1; i++) printf ("%d ",a[i]);else for (int i=1; i<=ans/2; i++) printf ("%d ",a[i]);printf ("\n");}return 0;
}

B. Neko Performs Cat Furrier Transform---异或的性质运用--Codeforces Round #554 (Div. 2)相关推荐

  1. Neko Performs Cat Furrier Transform

    https://codeforces.com/contest/1152/problem/B 题解:模拟+贪心 /* *@Author: STZG *@Language: C++ */ #include ...

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

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

  3. A. Neko Finds Grapes-奇偶的性质及运用-Codeforces Round #554 (Div. 2)

    Neko Finds Grapes time limit per test 2 seconds memory limit per test 256 megabytes 题目链接https://code ...

  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(a,b) = GCD(a,b-a))

    传送门 •题意 给出两个正整数 a,b: 求解 k ,使得 LCM(a+k,b+k) 最小,如果有多个 k 使得 LCM() 最小,输出最小的k: •思路 时隔很久,又重新做这个题 温故果然可以知新❤ ...

  6. Codeforces Round #554 Div.2 E - Neko and Flashback

    欧拉路径 神题啊神题!这道题的突破口就是后两个数组每个元素是一一对应的. 也就是说,对于一个p的排列,b'和c'取得每一个元素的下标在p中都是一样的. 根据b和c数组的性质可以得出,b[i] < ...

  7. Codeforces Round #554 (Div. 2) A. Neko Finds Grapes

    原题地址 这道题还是很水的,但是自己有点小傻...一开始纯暴力一发直接TLE....然后开始找规律,发现只要使第一行的奇数与第二行的偶数判断大小就行,同理第一行的偶数与第二行的奇数判断大小. 其他也就 ...

  8. Codeforces Round #242 (Div. 2)C(找规律,异或运算)

    一看就是找规律的题.只要熟悉异或的性质,可以秒杀. 为了防止忘记异或的规则,可以把异或理解为半加运算:其运算法则相当于不带进位的二进制加法. 一些性质如下: 交换律: 结合律: 恒等律: 归零律: 典 ...

  9. Codeforces Round #532 (Div. 2) F. Ivan and Burgers(可持久化异或线性基+双指针)

    题意 给n个数,q组询问,每次询问l到r的最大异或和 思路来源 某cf奆神代码 题解 本来应该是线性基上分治的 这里一发基数+贪心也能过 真是神仙代码啊 双指针的经典应用: 对于每个询问[l,r],r ...

  10. Codeforces Round #512 (Div. 2 E. Vasya and Good Sequences 异或问题

    题目连接 题意: 给你n个数,每个数的二进制可以拆开,这个数拆开之后可以任意换0和1的位置,问有多少个l r区间 能满足异或和为0 做法:主要是看1的个数问题,由于0 1可以互换位置,那么我可以把1换 ...

最新文章

  1. Python经典面试题100道(附PDF下载地址)
  2. 关于tomcat8在windows2008下高并发下问题的解决方案
  3. rand--创建均匀分布随机矩阵
  4. MySQL 配置错误
  5. linux基础(Vi编辑器)
  6. 【Spring BootSpring Cloud系列】Spring Boot初识
  7. GTP时间管理的实践心得
  8. 批量查看域用户登录计算机信息
  9. 奥维地图怎么查看历史地图_奥维互动地图使用小技巧
  10. 北辰创业笔记:百度霸屏之长尾关键词是什么
  11. 433m的模块含义及该如何适当的选择对应的无线模块
  12. 麻省理工十亿美元计算机学院,麻省理工学院宣布10亿美元成立新计算机学院 | 芥末堆...
  13. 今天就给大家介绍一个抢购茅台的小技巧,不需要安装Python,不需要配置环境,就和你在电脑上安装使用QQ等软件一样
  14. java定义一个盒子类box_C++定义一个Box(盒子)类 看完你就知道了
  15. ruoyi框架默认的导出Excel功能代码简析
  16. 布法罗计算机专业怎么样,2019上海软科世界一流学科排名计算机科学与工程专业排名纽约州立大学布法罗分校排名第76-100...
  17. 前端开发行业真的会被AI取代吗?
  18. 浏览器配置异常_IE浏览器常见故障及问题解决方法大全
  19. 服务器提示临时文件已满,win10系统提示”由于临时文件夹已满而导致“磁盘空间不足”错误的解决办法_win10教程_uc电脑园...
  20. mysql gman do_MySQL UDFs 来管理调用 Gearman 的分布式的队列

热门文章

  1. 基于StackGAN++、CycleGAN的图像生成工具,开源
  2. 华为 QOS服务质量基础知识总结
  3. 什么是射频信号发生器?信号发生器具有哪些特点?(一)
  4. 信息系统项目管理师考试中涉及到的法律法规知识
  5. Linux基础命令与操作
  6. 业务安全情报第四期:新能源车企重金打造的私域流量,成为黑灰产“掘金发财”的新目标
  7. 企业网站建设流程是什么?三个流程要知道
  8. Excel中输入整数却总是显示小数,如何调整?
  9. 解决多线程编程中大并发数等待唤醒的问题
  10. android sit0 ip6tnl0,android netcfg iwlist 的使用