首页 > 其他分享 >起床困难综合症[二进制运算]

起床困难综合症[二进制运算]

时间:2022-09-20 13:00:15浏览次数:95  
标签:运算 二进制 register 综合症 int while ans

题面

[https://www.luogu.com.cn/problem/P2114]

分析

题目要求是从[0,m]中选出一个数,经过给定的n次运算,得到结果ans最大
位运算主要特点之一是二进制表示下不进位
所以对于一个确定的x经过n次运算之后每一位的值是固定的
即每位上1或0最后的结果是可以确定的
那么预处理每一位0或1最后运算的结果之后
为了使ans最大,能变1都变1(但是要保证原来的数<=m)

code(换马蜂了)

#include <iostream>
#include <cstdio>
using namespace std;
inline int read(){
	register int x = 0, f = 1;
	register char c = getchar();
	while (c < '0' || c > '9') {if (c == '-') f = -1; c = getchar();}
	while (c >= '0' && c <= '9') x = (x << 3) + ( x << 1) + c - '0',c = getchar();
	return x * f;
}
int n, m;
int a0 = 0,a1 = -1;//-1在计算机中以补码形式存在,-1的补码为1111111……1
int init(){
	n = read(), m = read();
	while (n--){
		char str[5];
		scanf ("%s", str);
		int t = read();
		if (str[0] == 'A') a0 &= t, a1 &= t;
		if (str[0] == 'X') a0 ^= t, a1 ^= t;
		if (str[0] == 'O') a0 |= t, a1 |= t; 
	}
}

int doit(){
	int val=0,ans=0;
	for (int i = 29; i >= 0;i--){
		if (a0 >> i & 1) ans += 1 << i;//0能变1直接变
		else if (a1 >> i & 1 && (1 << i) + val <= m) ans += 1 <<i, val += (1 << i);//1能变1也直接变,同时考虑初始值的大小要小于m
	}
	printf ("%d", ans);
}

int main(){
	init();
	doit();
	return 0;
}

标签:运算,二进制,register,综合症,int,while,ans
From: https://www.cnblogs.com/cancers/p/16710657.html

相关文章

  • C\C++位运算与位移运算
    位运算符:&//位与运算符|//位或运算符~//位非运算符^//位异或运算符 位与运算规则:8&3//8与30&0得00&1得01&0得01......
  • javascript中的运算符
     重点看带星号的1、===严格相等运算符,用作逻辑判断,为什么不用==呢? 第二条1=='1',解释器会将'1'转化称数字1然后再比较,结果就是true而第三条就是从类型和数值上比较......
  • 3.运算符
    运算符算数运算符赋值运算符复合赋值运算符⽐较运算符逻辑运算符算数运算符符号描述实例+加print(1+1)输出结果为2-减print(1-1)输出结果为0......
  • C 语言运算符的优先级表
    优先级运算符名称或含义使用形式结合方向说明1[]数组下标数组名[常量表达式]左到右()圆括号(表达式)/函数名(形参表).成员选择(对象)对象.成......
  • JAVA基础Day2-基本运算符/自增自减运算符/逻辑运算符、位运算符/包机制
    一、基本运算符算术运算符:+、-、*、/、%、++、--赋值运算符:=关系运算符:>、<、>=、<=、==、!=instanceof逻辑运算符:&&、||、!位运算符:&、|、^、~、>>、<<条件运算符:?:......
  • JAVA学习-四则运算的优化
    在这一节中要对上次写的用random函数的应用生成的四则运算程序进行优化,要求是需要实现在线答题,并且可以给出题目的答案讲错题存起来,可以进行错题重做,还要给出错题率以及相......
  • 运算符
    运算符Java语言支持如下运算符:算术运算符:+,-,,l,%,++,--赋值运算符=关系运算符:>,<,>=,<=,==,!=instanceof逻辑运算符:&&(与),||(或),!(非)位运算符:&,|,^,~,>>,<<,>>>(......
  • 运算函数
    除法运算:1/2表示,1为被除数,结果为0.5。但,1\2,2为被除数,结果为2mean(A,dim),求平均,dim=1表示按列求平均值,dim=2表示按行求平均值median(A,dim),求中位数,dim=1,按列......
  • 剑指 Offer II 003. 前 n 个数字二进制中 1 的个数【模拟】
    题目给定一个非负整数n,请计算0到n之间的每个数字的二进制表示中1的个数,并输出一个数组。难度:简单说明:0<=n<=105题解按照题意模拟即可classSolutio......
  • 手写编程语言-实现运算符重载
    前言先带来日常的GScript更新:新增了可变参数的特性,语法如下:intadd(strings,int...num){ println(s); intsum=0; for(inti=0;i<len(num);i++){ intv=n......