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

算法-试填法

1、试填法

D-Digital Pairing_牛客周赛 Round 112

算法思路

核心思想:贪心 + 按位处理

  1. 从高位到低位贪心:从最高位(第32位)开始,依次检查每个位能否设置为1

  2. 位可行性检查:对于当前位,检查有多少个数字在该位上为1且满足之前高位的要求

  3. 逐步筛选:如果满足条件的数字足够组成两组(每组n个),则将该位加入答案,并只保留这些满足条件的数字进行后续处理

  4. 最终结果:所有能够设置的位组合起来就是最大总和谐度

关键点

  • 优先保证高位为1,因为高位对数值的影响更大

  • 通过vis数组来跟踪哪些数字满足当前所有已选位的要求

  • 每次成功设置一个位后,只考虑那些在该位为1且满足之前所有条件的数字

#include<iostream>
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=4e5+10;
void solve(){ll n;cin>>n;vector<ll> a(n*2+1);// 读入2n个数字for(ll i=1;i<=n*2;i++){cin>>a[i];}  ll ans=0;// vis数组:标记哪些数字当前还满足条件(初始都满足)vector<ll> vis(n*2+1,1);// 从高位到低位贪心(32位到0位)for(ll bit=32;bit>=0;bit--){vector<ll> v;  // 存储当前位为1的数字索引vector<ll> nvis(n*2+1,0);  // 新的vis数组// 遍历所有数字,检查当前位是否为1且满足之前条件for(ll i=1;i<=n*2;i++){if(!vis[i]) continue;  // 跳过不满足之前条件的数字// 检查数字a[i]的第bit位是否为1if(a[i]>>bit & 1){v.emplace_back(i);  // 记录满足条件的数字索引}} // 如果满足条件的数字足够组成两组(每组需要n个)if(v.size()>=n){// 设置答案的当前位为1ans |= (1LL << bit); // 更新vis数组:只保留在当前位为1的数字for(auto & i:v){nvis[i]=1;}vis = nvis;  // 更新条件筛选}// 如果不够,保持当前vis不变,继续检查下一位}cout<<ans<<endl;
}
int main(){ll t;cin>>t;while(t--){solve();}return 0;
}
http://www.dtcms.com/a/450544.html

相关文章:

  • 云建站步骤国内人做韩国网站一般都卖什么东西
  • 营销软件网站七星彩网站开发公司
  • 网站如何做问卷调查微信公众号微网站制作
  • 陕西煤业化工建设集团有限公司网站微网站开发怎么写
  • 建设网站需要什么样的服务器广州网站开发招聘信息
  • 营销型网站建设ppt模板下载百度在全国有哪些代理商
  • 网站建设 招聘国外有哪些网站做推广的比较好
  • UNIX下C语言编程与实践35-UNIX 守护进程编写:后台执行、脱离终端、清除掩码与信号处理
  • 漳州做网站优化全网有哪些网站可以做淘客
  • 晋江网站建设山东省建设局拖欠工资网站
  • 命令行创建https证书详解
  • Linux 基础命令的 7 大核心模块
  • 沐川移动网站建设设计网站私单价格
  • 杭州网站建设 博客南京做网站品牌
  • 大连专业模板网站制作福州网站提升排名
  • AI-RAN 开发者套件,使用指南
  • 网站自动加水印四川哪家网站推广做的好
  • 泸友科技网站购物网站图片素材
  • 汕头建站模板厂家十堰网站建设u2028
  • C语言进阶知识--字符和字符串函数
  • C++中指针传递与引用传递的区别
  • 云南建设局网站首页网页浏览器主要通过ftp协议
  • 网站建设先航科技贵阳制作网站的公司
  • 做网站建设有哪些公司好耒阳住房与建设局网站
  • Helm入门
  • SpringBoot项目搭建
  • 网站导航菜单兰品牌建设助力高质量发展
  • 小游戏网站网址今天的头条新闻
  • 中专网站建设课程东莞网站系统后缀
  • 广州市学校网站建设公司网站html5自适应屏幕大小