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

第八届广西大学生程序设计大赛暨2025邀请赛 G题思路分享(trie树)

https://ac.nowcoder.com/acm/contest/110811/G

题意概述

给定两个长度为 \(n\) 的数组 \(a,b\) 和两个参数 \(k_1,k_2\),求满足:

  • \(i \lt j\)

  • \(k_1 \oplus a_i \oplus a_j \lt k_2 \oplus b_i \oplus b_j\)

的点对数量。

思路

\(k_1 \oplus a_i \oplus a_j = X\)\(k_2 \oplus b_i \oplus b_j = Y\)。原不等式相当于在 \(X \oplus Y\) 的最高有效位 \(d\) 上,\(X\) 在该位上为 \(0\)\(Y\) 在该位上为 \(1\)

\(X \oplus Y\)\(d\) 之前的位上为 \(0\)\(X\) 的第 \(d\) 位为 \(0\),即 \(k_1 \oplus a_i \oplus a_j\)\(d\) 位为 \(0\)

\(X \oplus Y\) 的表达中可以将 \(i,j\) 分离,考虑 \(trie\) 树,插入 \(a_i \oplus b_i\)。需要知道 \(X\) 是否为 \(0\),统计 \(a_i\) 在该位为 \(0\) 和为 \(1\) 的数量。

\(trie\) 树上累加贡献即可,跳转时走让 \(X \oplus Y\) 在该位为 \(0\) 的边,如果存在让 \(X \oplus Y\) 在该位为 \(1\) 的边,就以该位为最高位计算一次贡献。

时间复杂度 \(\mathcal{O}(32n)\)

代码

//author:kzssCCC#include <bits/stdc++.h>
using namespace std;
using ll = long long;void solve(){int n,k1,k2;cin >> n >> k1 >> k2;vector<int> a(n+1);for (int i=1;i<=n;i++){cin >> a[i];}	vector<int> b(n+1);for (int i=1;i<=n;i++){cin >> b[i];}vector<array<int,2>> next{{-1,-1}};vector<array<int,2>> cnt{{0,0}};ll res = 0;for (int i=1;i<=n;i++){{int u = 0;for (int j=31;j>=0;j--){if (next[u][((a[i]^b[i]^k1^k2)>>j&1)^1]!=-1){res += cnt[next[u][((a[i]^b[i]^k1^k2)>>j&1)^1]][(a[i]^k1)>>j&1];}if (next[u][(a[i]^b[i]^k1^k2)>>j&1]!=-1){u = next[u][(a[i]^b[i]^k1^k2)>>j&1];}else break;}}{int u = 0;for (int j=31;j>=0;j--){int cj = (a[i]^b[i])>>j&1;if (next[u][cj]==-1){next.push_back({-1,-1});next[u][cj] = next.size()-1;cnt.push_back({0,0});}cnt[next[u][cj]][a[i]>>j&1]++;u = next[u][cj];}}}cout << res << '\n';
}int main(){ios::sync_with_stdio(false);cin.tie(0);int t = 1;// cin >> t;while (t--) solve();return 0;
}
http://www.zskr.cn/news/1414425.html

相关文章:

  • Flightmare无人机仿真:5个步骤快速上手的完整教程
  • 【紧急更新】Veo 2.3.1补丁强制要求:所有生产环境必须在72小时内完成预览缓冲区隔离配置,否则触发自动降级
  • 扬州邗江区黄金回收2026年5月实操指南:正规透明变现,上门服务覆盖全域 - 润富黄金珠宝行
  • 我的电视(MyTV-Android)终极指南:让Android电视直播变得简单流畅
  • Windows 11终极优化指南:用Win11Debloat让电脑重获新生
  • Veo 2 API接入全流程拆解:从OAuth2.1鉴权到视频生成回调的7步工业级部署标准
  • 专业级Forza Mods AIO完全指南:极限竞速游戏修改工具深度解析
  • Gemini新功能上线首日故障率下降41%,但83%工程师仍在用旧接口(附兼容性迁移速查表)
  • Taotoken模型广场如何帮助我快速选型与切换大模型
  • 5分钟掌握MeteoInfo:气象GIS与科学计算的终极解决方案
  • 5G OFDM带宽与采样率解析
  • ChatGPT汇报材料优化终极指南(内含37个已验证Prompt模板+12类行业话术库):错过本轮升级,下次汇报仍被质疑专业度
  • 【Veo 2终极画质校准手册】:基于ITU-R BT.2100-HLG实测的12项色彩映射补偿参数,仅限首批Beta测试者访问的LUT矩阵
  • 5分钟解决!Mac上Xbox手柄驱动安装的完整终极指南
  • 5分钟上手Hourglass:Windows平台最轻量倒计时工具终极指南
  • Adobe-GenP:5分钟快速解锁Adobe全家桶的终极解决方案
  • 软考知识点(防火墙)
  • 利用Taotoken CLI工具一键配置团队统一的AI开发环境
  • 用二手F450机架和BeeRotorF3飞控,花最少的钱组装你的第一台四轴飞行器(附BetaFlight 4.0.6配置)
  • CY3-PEG-DMPE 三甲川花菁染料PEG磷脂 技术优势
  • 为什么顶尖AI团队已在发布会前48小时全员待命?揭秘Gemini新API Rate Limit突变、Token计费模型重构与企业级SLA条款暗改
  • Arduino避障机器人制作:从超声波传感器到电机驱动的完整实践
  • 为内部aiagent平台集成taotoken作为统一模型供应商的架构设计
  • 数字医生的临床诊断报告: AI中转层五型Token降配综合征
  • Smithbox完整指南:如何快速掌握游戏修改的核心技巧
  • 3步掌握猫抓资源嗅探:轻松下载网页视频音频的完全指南
  • 3个核心技巧:打造你的专属Android电视直播中心
  • Arduino红外传感器音乐触发装置:从原理到实践的创客入门项目
  • 当网页视频变成“只读文件“时:猫抓插件如何帮你找回资源掌控权
  • 天若OCR开源版:零配置实现高效离线文字识别的技术实践