首页 > 其他分享 >刷题 位运算 位掩码

刷题 位运算 位掩码

时间:2023-12-07 23:56:04浏览次数:36  
标签:运算 int ll cin long ans 掩码 刷题

2023.12.7 1903D1

 

解题思路

题目一眼long long,所以从大到小迭代每一个位(262到20

因为要与&起来最大,尽量把高位的0在不超过步数的情况下整成1,所以如果第i位是0,就把ai增加到下一位变成1

只有能走到最后的i是答案的二进制第i位为1,直接加在ans上

 

代码

 

#include<iostream>
#include<algorithm>
using namespace std;
#define ll long long
ll a[100005],b[100005];
int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	int n,q;
	cin>>n>>q;
	for(int i=1;i<=n;i++)cin>>a[i];
	while(q--)
	{
		ll k,ans=0;
		cin>>k;
		for(int i=1;i<=n;i++)b[i]=a[i];
		for(int i=62;i>=0;i--)
		{
			ll sum=0;
			for(int j=1;j<=n;j++)
			{
				if(b[j]&1ll<<i)continue;
				ll p=(b[j]/(1ll<<i)*(1ll<<i)+(1ll<<i));
				p+=ans^(p&ans);//保证p变的时候别把ans本来有的变走了
				sum+=p-b[j];
				if(sum>k)break;
			}
			if(sum>k)continue;
			for(int j=1;j<=n;j++)
			{
				if(b[j]&1ll<<i)continue;
				ll p=(b[j]/(1ll<<i)*(1ll<<i)+(1ll<<i));
				p+=ans^(p&ans);
				b[j]=p;//相应的改变数组
			}
			ans+=1ll<<i;
			k-=sum;
		}
		cout<<ans<<endl;
	}
	return 0;
}

标签:运算,int,ll,cin,long,ans,掩码,刷题
From: https://www.cnblogs.com/modemingzi-csy/p/17884286.html

相关文章

  • C-04.运算符(基础)
    运算符1.算术运算符算术运算符主要用于数学运算,其可以连接运算符前后的两个数值或表达式,对数值或表达式进行+,-,*,/,%运算。1.1加法和减法运算符mysql>SELECT100,100+0,100-0,100+50,100+50-30,100+35.5,100-35.5->FROMdual;+-----+---------+--------......
  • 刷题 数论 组合数
    2023.12.7cf1907E 解题思路首先明确,如果这三个数加起来发生了进位,那么必然不是好数(一个位换下一个位总和会有损失)然后,结果n的每一位就可以拆成几个1,或者说几个小球,用两个隔板往小球的空隙插(注意因为0也有可能,所以小球两边也可插,可插空隙个数为num+2)然后就可以直接组合数,每......
  • Java扩展赋值运算符,字符串连接符
    1.扩展赋值运算符  2.字符串连接符   ......
  • Java逻辑运算符,短路运算
     短路运算 因为c=5,所以c<4为false,又因为逻辑与运算,只要出现一个false就会输出所以booleand=(c<4)&&(c++<4);这行代码直接会输出false,(c++<4)也不会被执行所以输出的结果为false,c=5,而不是c=6.-----------------------------------------------------------------------......
  • 前端歌谣的刷题之路-第一百一十五题-根据包名 在指定空间中创建对象
     前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从头再来歌谣的意志是永恒的放弃很容易但是坚持一定很酷本题目源自于牛客网微信公众号前端小歌谣题目......
  • 前端歌谣的刷题之路-第一百一十六题-数组去重
     前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从头再来歌谣的意志是永恒的放弃很容易但是坚持一定很酷本题目源自于牛客网微信公众号前端小歌谣题目......
  • 前端歌谣的刷题之路-第一百一十七题-实现斐波那契数列
     前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从头再来歌谣的意志是永恒的放弃很容易但是坚持一定很酷本题目源自于牛客网微信公众号前端小歌谣题目......
  • 集合异或运算--记录学习C语言每一天
    ////main.c//Hello////Createdbyrenxinon2023/11/28.//#defineElemTypeint#defineMaxSize50#include<stdio.h>#include<stdlib.h>typedefstructList{ElemTypeList[MaxSize];intLength;intSize;}List;voidIn......
  • 2023最新初级难度前端面试题,包含答案。刷题必备!记录一下。
    好记性不如烂笔头内容来自面试宝典-初级难度前端面试题合集问:请详细描述HTML、CSS、JavaScript的基本结构?HTML、CSS、JavaScript是web前端开发中最常用的三种技术,它们分别负责页面结构、表现形式和交互行为。HTML(HyperTextMarkupLanguage)是一种用于构建网页的标......
  • 刷题 二分
    2023.12.6cf1902B二分一般来讲我们会在以下情况用到二分:求单调函数的零点求最小值的最大,或最大值的最小很难直接算出答案,但是很好判定答案合不合法二分答案和二分查找差不多,就是check函数内是贪心dp之类的东西当用二分控制精度时,以r-l>eps为循环条件,mid选r和l都行,一般需......