当前位置: 首页 > news >正文

贪心-试填法

链接:https://ac.nowcoder.com/acm/contest/118247/D
来源:牛客网

题目描述

小苯在研究一种特殊的数字配对问题。给定 2×n 个正整数 a1,a2,...,a2n,需要将它们恰好平分成 2 组,每组的"配对值"定义为每组 n 个数的按位与(AND)。定义两个组的"总和谐度"为两组"配对值"的最大值。现在小苯想知道,在所有可能的分组方式中,能够获得的最大总和谐度是多少?

#include<bits/stdc++.h>
#define int long long
using namespace std;
int32_t main() {ios::sync_with_stdio(false);cin.tie(nullptr);int T;cin>>T;while(T--){int n;cin >> n;vector<int> a(2 * n + 1);for (int i = 1; i <= 2 * n; i++) cin >> a[i];int ans = 0;vector<int>vis(2 * n + 1, 1);for (int bit = 40; bit >= 0; bit--) {vector<int>cnt;vector<int>nvis(2 * n + 1, 0);for (int i = 1; i <= 2 * n; i++) {if(!vis[i]) continue;if ((a[i]>>bit)&1){cnt.emplace_back(i);}}if (cnt.size() >= n){ans|=1ll<<bit;for(auto &i:cnt){nvis[i]=1;}vis=nvis;}}cout << ans << endl;}return 0;
}

       试填法可以理解为贪心在数位上的具体应用,我们如果想要一个整体最大的数,那么我们没有必要让这个数每一位是最大的,我们只需要让这个数的最高位最大就可以了,如果两个数的最高位相同,那么我们就需要找次高位最大的,以此类推。
       这道题具体的实现方法是每次遍历每个(被标记为 1 的)数的最高位(第bit位),如果有满足条件的一组数(cnt.size() >= n)那么把这一组数标记为 1 ,并把最高位加到答案中,这样以来我们就保证总和最大。

http://www.dtcms.com/a/554947.html

相关文章:

  • 网站开发需要学什么技能平价网站平价网站建设建设
  • 做淘宝网站用什么浏览器手机搭建网站
  • 案例学习网站建设方案摸摸学校网站优化客户报表
  • 夜莺监控设计思考(五)告警原理和处理流程深度剖析
  • 有没有设计网站在广州的企业vi设计说明
  • 网站制作 毕业设计免费推广店铺的网站
  • php做网站安性如何百度服务器建设自己的网站
  • 桂林做网站哪家好中医网站模板
  • 海南网站建设多少钱网站开发验收确 认书
  • 【气动技术】气动真空系统及其选型计算
  • 手机网站页面设计网络网站建设
  • ubuntu apt镜像软件仓库配置
  • 阜宁县网站建设建设网站和ipv4和ipv6什么关系
  • 江门网站制作软件网站备案 前置审批文件
  • 48.渗透-HTTP响应
  • 中国各大网站扁平化 网站
  • 湖州长兴建设局网站用asp.net做网站计数器
  • 建瓯企业网站建设wordpress添加目录
  • 想自己做个网站怎么做要进一步增强门户网站建设合力
  • 金融行业网站建设方案晋城网站建设科技有限公司
  • 家电网站建设网页设计制作音乐排行榜
  • 做易拉宝设计的网站永久免费安卓代理ip
  • Linux进程信号(Ⅱ)
  • 从移动硬盘恢复 Timeshift 原始备份的终极指南(含 GRUB 修复 + 多场景适配)
  • ae做的动效怎么放在网站上用html做一个网页
  • 做网站目的国内管理咨询公司排名前十名
  • Maven依赖冲突的解决
  • abap 使用‘SAVE_TEXT‘ 函数注意
  • 基于单片机的物联网智能图书登记终端设计与实现
  • 茂名模板建站定制网站运营难做吗