首页 > 其他分享 >从CF1875C学习lowbit运算判断是否为 2 的 k 次幂

从CF1875C学习lowbit运算判断是否为 2 的 k 次幂

时间:2024-01-22 16:46:15浏览次数:31  
标签:CF1875C 判断 运算 int lowbit 是否 该数

Problem - 1875C - Codeforces

本题判断无解的时候要判断该数是否为 2 的 k 次幂,我的做法是预处理出 2 的次幂数表。

看题解发现可以用 lowbit 操作。

lowbit操作

int lowbit(int x) {return x & (-x);}

根据补码原理,该操作可以求出来 X 最靠右的 \(1\) 构成的数。

判断 \(x\) 是否为 \(2^k\)

显然,一个数为 \(2^k\) 当且仅当该数在二进制上仅一位为 \(1\),也就是说 lowbit 出来的结果是等于 x 的。

if(lowbit(x) == x)

标签:CF1875C,判断,运算,int,lowbit,是否,该数
From: https://www.cnblogs.com/kdlyh/p/17980377

相关文章

  • FICO 三大报表运算维护表计算规则(表里维护行次的)
    1+2+3"内表整理科目报表项目汇总后计算公式1+2+3DATA:lv_strTYPEstring,lv_str1TYPEstring,lt_numTYPETABLEOFstring,lt_signTYPETABLEOFstring,lv_indexTYPECHAR4,lv_iTYPEi,lv_sumTYPEpDECIMALS3.......
  • (17)Powershell中的重定向运算符
    (17)Powershell中的重定向运算符默认情况下,Powershell把输出发送到屏幕显示。但是,Powershell也可以将输出重定向至一个文本文件,或将错误输出重定向至常规输出流。重定向运算符有什么用?重定向运算符意味着我们可以将命令的输出信息输出到指定的文件,完全满足脚本中的log的要求,......
  • JavaScript 中的展开运算符是什么?
    展开运算符(SpreadOperator)是JavaScript中的一种语法,用于将可迭代对象(如数组或字符串)展开为独立的元素。它使用三个连续的点号(...)作为操作符。展开运算符可以在多种情况下使用,包括数组、对象和函数调用等。下面是一些展开运算符的用法示例:1:展开数组:使用展开运算符可以将一......
  • 逻辑运算符||、&&
    #define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>intmain(){ inti=0,a=0,b=2,c=3,d=4; //i=a++&&++b&&d++; //当第一个&&左边的条件为假时,其后条件便不再进行(逻辑截断) i=a++||++b||d++; //当第一个||成立,其后的表达式不再进行运算 prin......
  • 位运算(c++)
    n的二进制表示第k位是几①先把第k位移到最后一位:n>>k②看个位是几:&1n>>k&1lowbit(x):返回x的最后一位1是多少例如1010--->10,101000--->1000实现:x&-x=x&(~x+1)例:输入一个数组返回数组中每个元素二进制形式中1的个数代码:#include<iostream>using......
  • (14)Powershell中的逻辑运算符
    (14)Powershell中的逻辑运算符上一节介绍了Powershell中的比较运算符,以及如何使用Powershell中的位运算来操作文件的属性,想写内容参考HERE。这一节介绍Powershell中的逻辑运算符。逻辑运算符可以连接表达式和语句,返回值为TRUE或者FALSE,以此来构成条件为真或为假的bool(TR......
  • (13)Powershell中的比较运算符与位运算符
    (13)Powershell中的比较运算符与位运算符上一节介绍了Powershell中变量的类型,详细内容使劲戳这里。本节介绍Powershell中的比较运算符。使用比较运算符,可以指定用于比较值,也可以查找与指定模式匹配的值。如果要使用比较运算符,需要同时指定要进行比较的值以及分隔这些值的运算......
  • 24new和delete的运算符重载视角
    new和delete的运算符重载视角new和malloc对比:malloc按字节开辟内存,返回void*,需要强制类型转换;new开辟内存需要指定类型new在malloc的基础上,还会进行数据的初始化malloc开辟内存失败返回nullptr,new抛出bad_alloc类型的异常delete和free对比:delete是在free的基础上进行了析......
  • 20C++的运算符重载
    C++的运算符重载编译器在做对象运算的时候,会调用对象的运算符重载函数(优先调用成员方法)。如果找不到合适的成员方法,则在全局作用域寻找合适的运算符重载函数.#include<iostream>usingnamespacestd;//复数类classCComplex{private: intmreal; intmimage; //友元函......
  • (11)Powershell赋值运算符(二)
    (11)Powershell赋值运算符(二)上一节介绍了Powershell赋值运算符中的=,+=,-=,详细内容参考这里。本节介绍Powershell赋值运算符中的*=,/=,%=,++,--。1.乘法赋值运算符(*=)乘法赋值运算符(*=)对数字值执行乘法或追加指定数目的变量字符串值副本。如果变量是单个......