二分答案思想下的二进制问题

序列合并

题目描述

给定一个长度为 n n n 的非负整数序列 { a n } \{a_n\} {an},你可以进行 k k k 次操作,每次操作你选择两个相邻的数,把它们合并成它们的按位或。

形式化地,一次操作中,你选择一个下标 i i i 1 ≤ i < n 1 \le i < n 1i<n),然后把原序列变成 { a 1 , a 2 , ⋯   , a i or ⁡ a i + 1 , a i + 2 , ⋯   , a n } \{a_1,a_2,\cdots,a_i \operatorname{or} a_{i+1},a_{i+2},\cdots,a_n\} {a1,a2,,aiorai+1,ai+2,,an}

k k k 次操作后所有数按位与的最大值。

输入格式

第一行包含两个正整数 n , k n,k n,k

第二行包含 n n n 个非负整数,其中第 i i i 个非负整数为 a i a_i ai

输出格式

输出一行,包含一个正整数,代表答案。

【数据范围】

  • 对于 25 % 25\% 25% 的数据, n ≤ 20 n \le 20 n20
  • 对于另外 25 % 25\% 25% 的数据, k = n − 2 k=n-2 k=n2

对于所有数据,保证 1 ≤ k < n ≤ 2 × 1 0 5 1 \le k<n \le 2 \times 10^5 1k<n2×105 0 ≤ a i < 2 30 0 \le a_i < 2^{30} 0ai<230

思路

对于这种给定一个序列,,定义其价值为序列最终其相/的值时,我们往往可以考虑去枚举最终的答案是否合法。
具体操作为,我们枚举答案二进制表示下的每一位,因为是尽可能的让答案更大,所以我们去枚举当前位为1时是否合法即可。
综上思路就和二分答案有些类似,所以这一类题的关键就在于如何 check 每次枚举的答案。
对于这一题,我们可以发现,对一个序列进行k次合并,等价于将其划分成 n − k n-k nk 个子段,现在题目变为了对于每个子段 x i x_i xi ,其最终相与的值是否能为 x x x ,那么对于每个子段的 x i x_i xi 而言,x 二进制表示上为 1 的位置, x i x_i xi 对应的位置也得为 1,所以我们的思路为,使用一个变量 s s s 去记录当前子段内部相或的值,若 s & x = x s\&x = x s&x=x ,那么则清空 s s s,子段数加一,最后判断子段数是否大于 n − k n-k nk 即可。

#include <bits/stdc++.h>

using namespace std;
const int N = 1e5 + 5;
typedef long long ll;
typedef pair<ll, ll> pll;
typedef array<ll, 3> ar;
int mod = 998244353;
const int maxv = 4e6 + 5;
// #define endl "\n"



void solve()
{
	int n,k;
	cin>>n>>k;
	vector<int> a(n);
	for(auto &ai: a) cin>>ai;
	ll ans=0;
	auto check=[&](int x)
	{
		int s=0;
		int cnt=0;
		for(int i=0;i<n;i++){
			s|=a[i];
			if((s&x)==x){
				s=0;
				cnt++;
			}
		}
		return cnt>=n-k;
	};
	for(int i=31;i>=0;i--){
		ll res=ans+(1<<i);
		if(check(res)){
			ans=res;
		}
	}
	cout<<ans<<endl;
}

int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int t;
	t = 1;
	// cin >> t;
	while (t--)
	{
		solve();
	}
	system("pause");
	return 0;
}

牛客小白月赛94 E,F

在这里插入图片描述

思路:

这题和上面一题类似,也是求一些数相与的最大值,我们可以去枚举答案的每一位,去check当前这一位放 1 后是否合法即可。
这题的 check 比上一题还简单,即若当前的价值为当前枚举答案 x x x 的子集,我们变把他放入,最后看体积是否合法即可。

#include <bits/stdc++.h>

using namespace std;
const int N = 1e5 + 5;
typedef long long ll;
typedef pair<ll, ll> pll;
typedef array<ll, 3> p3;
int mod = 998244353;
const int maxv = 4e6 + 5;
// #define endl "\n"



void solve()
{
    int n,k;
    cin>>n>>k;
    vector<int> v(n+5),w(n+5);
    for(int i=1;i<=n;i++) cin>>v[i]>>w[i];
    ll ans=0;
    auto check=[&](int x)
    {
        ll sum=(1ll<<32)-1;
        for(int i=1;i<=n;i++){
            if((w[i]&x)==x){
                sum&=v[i];
            }
        }
        return sum<=k;
    };
    for(int i=31;i>=0;i--){
        ll res=ans+(1<<i);
        if(check(res)){
            ans=res;
        }
    }
    cout<<ans<<endl;
}

int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int t;
	t = 1;
	// cin >> t;
	while (t--)
	{
		solve();
	}
	system("pause");
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/656169.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Transformer模型架构笔记

0. 简介 Transformer是一种用于自然语言处理&#xff08;NLP&#xff09;和其他序列到序列&#xff08;sequence-to-sequence&#xff09;任务的深度学习模型架构&#xff0c;它在2017年由Vaswani等人首次提出。Transformer架构引入了自注意力机制&#xff08;self-attention …

windows中每日定时执行python脚本,解决问题

由于需要一个每天定时执行的任务&#xff0c;所以需要定时启动&#xff0c;网上看了很多方法&#xff0c;感觉不能在python脚本种写个while true 定时执行&#xff0c;占资源不说还不可靠。 最后考虑通过系统工具定时启动&#xff0c;发现linux中有crontab&#xff0c;windows…

JMH304-剑侠情缘2网络版+2017纹饰端+翅膀+单机+外网整理+各种副本

资源介绍&#xff1a; 藏剑-太虚-梁山-杀手堂种树地宫师门纹饰装备长流云阳套等等———– 做登录器联系站长 资源截图&#xff1a; 下载地址

2023、2024国赛web复现wp

2023 Unzip 类型&#xff1a;任意文件上传漏洞 主要知识点&#xff1a;软链接 随便上传一个一句话木马文件&#xff0c;得到一串php代码 根据代码上传zip文件发现进入后还是此页面 代码审计&#xff1a; <?php error_reporting(0); highlight_file(__FILE__);$finfo fin…

Mac免费软件推荐

1. iTerm2 - 功能强大的终端 iTerm2 是一个功能强大且灵活的终端仿真器&#xff08;可替代系统默认终端&#xff09;&#xff0c;适合需要在 macOS 上进行大量终端操作的用户。其丰富的功能和高可定制性使得 iTerm2 成为许多开发者和系统管理员的首选工具。无论是处理多个会话…

基于MyBatisPlus表结构维护工具

SuperTable表结构维护工具 一、简述 用于同步表实体与数据库表结构&#xff0c;同步建表、删改字段、索引&#xff0c;种子数据的工具… 一、开发环境 JDK&#xff1a;JDK8SpringBoot&#xff1a;2.7.2MyBatisPlus: 3.5.6MySQL: 5.7其他依赖&#xff1a;略 二、特性 表结…

5G工业数采网关的功能及工业应用-天拓四方

随着5G技术的不断发展&#xff0c;其在工业领域的应用日益广泛。5G工业数采网关作为连接工业设备与网络的重要枢纽&#xff0c;具备多种功能&#xff0c;为工业自动化、智能制造和智慧工厂提供了强大的支持。本文将详细解析5G工业数采网关的功能&#xff0c;并探讨其在工业领域…

【调试笔记-20240528-Linux-用 OpenWrt-23.05 SDK 编译 frp 软件包】

调试笔记-系列文章目录 调试笔记-20240528-Linux-用 OpenWrt-23.05 SDK 编译 frp 软件包 文章目录 调试笔记-系列文章目录调试笔记-20240528-Linux-用 OpenWrt-23.05 SDK 编译 frp 软件包 前言一、调试环境操作系统&#xff1a;Ubuntu 22.04.4 LTS编译环境调试目标 二、调试步…

剖析【C++】——类与对象(中)——小白篇—超详解

目录 1.类的6个默认成员函数&#xff1a; 1. 默认构造函数&#xff08;Default Constructor&#xff09; 2. 析构函数&#xff08;Destructor&#xff09; 3. 拷贝构造函数&#xff08;Copy Constructor&#xff09; 4. 拷贝赋值运算符&#xff08;Copy Assignment Operato…

【RK3288 Android10 T8pro usb hid-multitouch idc配置】

【RK3288 Android10 T8pro usb hid-multitouch idc配置】 文章目录 【RK3288 Android10 T8pro usb hid-multitouch idc配置】背景代码分析1. 读取配置文件2. 标志内外置屏幕3. 设置输入设备4. findviewport()5. 根据对应的viewport来计算相应的mapping的参数 结论 背景 T8pro …

C++网络编程——socket

在服务器中&#xff0c;需要建立一个socket套接字才能对外提供一个网络通信接口&#xff0c;在Linux系统中套接字仅是一个文件描述符&#xff0c;也就是一个int类型的值 socket概念 socket 的原意是“插座”&#xff0c;在计算机通信领域&#xff0c;socket 被翻译为“套接字…

骆驼大赛

目录 一&#xff0c;主版图 二&#xff0c;骰子 三&#xff0c;初始设置 四&#xff0c;核心规则 五&#xff0c;结算 这是适合5-8人玩的一个概率推理类的回合制桌游。 一&#xff0c;主版图 赛道由16个格子组成&#xff0c;编号为1-16。 一共7个骆驼&#xff0c;其中正…

python如何巧妙地利用内置函数与列表切片组织舞会派对

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言 二、问题分析 三、解决方案 1. 利用内置函数创建参会人员名单 2. 利用列表切片…

【教学类-58-06】黑白三角拼图06(1页3张彩色黑点卡片,一种宫格36张,适合一个班级一次操作)

作品展示 背景需求 【教学类-58-05】黑白三角拼图05&#xff08;2-10宫格&#xff0c;每个宫格随机1张-6张&#xff0c;带空格纸&#xff0c;1页3张黑白3张白卡&#xff09;-CSDN博客文章浏览阅读343次&#xff0c;点赞10次&#xff0c;收藏6次。【教学类-58-05】黑白三角拼图…

基于深度强化学习的无人车自适应速度规划

论文&#xff1a;Adaptive speed planning for Unmanned Vehicle Based on Deep Reinforcement Learning 编辑&#xff1a;东岸因为一点人工一点智能 基于深度强化学习的无人车自适应速度规划本文对无人车辆的速度规划部分进行了一些改进。首先&#xff0c;将车辆速度与车辆与…

Excel中怎样将第一行建立好的规则套用到每一行?

考虑使用条件格式来完成&#xff0c;有两种方式可以尝试&#xff1a; 一、一次性创建条件格式 1.选中需要设置条件格式的区域&#xff0c;如果是不连续的区域&#xff0c;可以按住Ctrl键&#xff0c;然后用鼠标依次选中需要的数据区域 2.点击 开始选项卡&#xff0c;条件格式…

探索python循环逻辑的魅力:从无限到有限

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言&#xff1a;循环逻辑的初步认识 二、无限循环&#xff1a;持续运转的引擎 三、有…

OpenHarmony Camera源码分析

一、简介 当前&#xff0c;开源在科技进步和产业发展中发挥着越来越重要的作用&#xff0c;OpenAtom OpenHarmony&#xff08;简称“OpenHarmony”&#xff09;赋予了开发者孕育创新的种子&#xff0c;也为数字化产业发展开辟了一片土壤。深开鸿是开源的坚定践行者&#xff0c…

云服务器平台AutoDL--基本介绍与使用感受

因为课程作业需要复现DreamBooth&#xff0c;找了几个教程之后&#xff0c;发现了AutoDL这个好东西&#xff0c;芜湖~ 相关概念 以下回答来自于ChatGPT。 云计算平台&#xff1a;云服务器平台是提供按需计算资源和服务的在线平台&#xff0c;通常包括存储、处理能力、数据库、…

所以研究生有不变胖的吗?

天天吃 记得和骏骏一样减肥 分享昨天无人机拍的照片