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

2025CCPC郑州部分题解

個、個、個、この世で個っ端みじんに壊れた個
个、个、个、在这世上碎成一“个个”渣的“个”

比赛链接

J. Subrectangle Count

给定一个长度为 nn ≥ 2)的整数序列 a₁, a₂, ..., aₙ,和一个长度为 mm ≥ 2)的整数序列 b₁, b₂, ..., bₘ。我们可以构造一个 n × m 的矩阵 c,其中矩阵元素 cᵢ,ⱼ = aᵢ ⊕ bⱼ1 ≤ i ≤ n, 1 ≤ j ≤ m),这里的 表示按位异或运算

请计算有多少对 (i, j)1 ≤ i < n, 1 ≤ j < m)满足:矩阵 c 中由 (i, j) 为左上角的 2×2 子矩形:
image

的形式为:
image

这等价于同时满足以下三个条件:

  1. cᵢ,ⱼ₊₁ = cᵢ,ⱼ + 1
  2. cᵢ₊₁,ⱼ = cᵢ,ⱼ + 2
  3. cᵢ₊₁,ⱼ₊₁ = cᵢ,ⱼ + 3

输入
第一行包含一个整数 T1 ≤ T ≤ 10⁵),表示测试用例的数量。

对于每个测试用例:

  • 第一行包含两个用空格分隔的整数 n, m2 ≤ n, m ≤ 2 × 10⁵),表示矩阵 c 的行数和列数。
  • 第二行包含 n 个用空格分隔的整数,表示序列 a₁, a₂, …, aₙ0 ≤ aᵢ < 2³⁰)。
  • 第三行包含 m 个用空格分隔的整数,表示序列 b₁, b₂, …, bₘ0 ≤ bᵢ < 2³⁰)。

保证所有测试用例的 n 之和不超过 2 × 10⁵,所有测试用例的 m 之和不超过 2 × 10⁵

输出
对于每个测试用例,输出一行,包含一个整数,表示满足条件的 (i, j) 对数。


题解

\(x=c_{i,j}\),那么我们可以得到一些式子:

  • \(x \oplus x+1=c_{i,j} \oplus c_{i,j+1}=(a_i\oplus b_j) \oplus (a_{i}\oplus b_{j+1})=b_j\oplus b_{j+1}\)

  • \(x \oplus x+2=c_{i,j} \oplus c_{i+1,j}=(a_i\oplus b_j) \oplus (a_{i+1}\oplus b_{j})=a_i\oplus a_{i+1}\)

  • \(x+1 \oplus x+3=c_{i,j+1} \oplus c_{i+1,j+1}=(a_{i}\oplus b_{j+1}) \oplus (a_{i+1}\oplus b_{j+1})=a_i\oplus a_{i+1}\)

  • \(x+2 \oplus x+3=c_{i+1,j} \oplus c_{i+1,j+1}=(a_{i+1}\oplus b_j) \oplus (a_{i+1}\oplus b_{j+1})=b_j\oplus b_{j+1}\)

考虑 \(x\oplus (x+1)=(x+2)\oplus(x+3)=b_j\oplus b_{j+1}=D_b\)

\(D_b\) 的性质

  • \(x\) 是偶数的时候,\((x+1)\)第一位是 \(1\) ,所以 \(x\oplus (x+1)=1=D_b\),同理 \((x+2)\) 也是偶数,可得 \((x+2)\oplus (x+3)=1=D_b\)

  • \(x\) 是奇数的时候,假设 \(x=011_{(2)}\),那么 \(x+1=100_{(2)},x+2=101_{(2)},x+3=110_{(2)}\)\(x\oplus (x+1)=111_{(2)}\neq (x+2)\oplus (x+3)=011_{(2)}\),易得 \(x\) 不能是奇数。

因此 \(x\) 必须是偶数,并且 \(D_b=1\)

考虑完了关于 \(b\) 数组性质后,接下来考虑 \(a\) 数组性质。

\(D_a\) 表示 \(x\oplus (x+2)\)

\(D_a\) 的性质

既然 \(x=2k\),不妨设 \(D_a=x\oplus(x+2)=2k\oplus (2k+2)=2(k\oplus(k+1))\)\(k\oplus (k+1)\) 必须是形如 \(2^p-1\),所以 \(D_a=x\oplus (x+2)=2^{p+1}-2\),设 \(D_a=x\oplus (x+2)=2^v-2\),那么稍加推理可以得到 \(x\) 的形状是 \(x\equiv 2^{v-1}-2\pmod{2^v}\).

image

算法步骤:

  1. 统计所有满足 \(b_j \oplus b_{j+1} = 1\) 的下标 \(j\)
  2. 遍历所有可能的 \(v \in [2, 30]\)。对于每一个 \(v\),找出所有满足 \(a_i \oplus a_{i+1} = 2^v - 2\) 的下标 \(i\)
  3. 利用公式 \(x \equiv 2^{v-1}-2 \pmod{2^v}\),由于 \(x = a_i \oplus b_j\),该条件等价于:

\[b_j \pmod{2^v} = (a_i \pmod{2^v}) \oplus (2^{v-1}-2) \]

  1. 使用排序配合二分查找来快速统计满足条件的 \((i, j)\) 数量。
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m;
const int N=2e5+5;
int a[N],b[N];
inline void solve(){cin>>n>>m;for(int i=1;i<=n;i++){cin>>a[i];}for(int i=1;i<=m;i++){cin>>b[i];}vector<int> posj;for(int j=1;j<m;j++){if((b[j]^b[j+1])==1){posj.push_back(j);}}vector<int> aa[32];for(int i=1;i<n;i++){int Da=a[i]^a[i+1];int tar=Da+2;if(tar>=4&&(tar&(tar-1))==0){//tar是2的次方int v=0;while(tar>1){tar>>=1;v++;}aa[v].push_back(i);}}int ans=0;for(int v=2;v<=30;v++){if(aa[v].empty()||posj.empty()) continue;int mod=(1<<v);vector<int> bmods;for(int j:posj){bmods.push_back(b[j]%mod);}sort(bmods.begin(),bmods.end());int xmask=(1<<(v-1))-2;for(int i:aa[v]){int tarbmod=(a[i]%mod)^xmask;//套用公式计算b的应该的值auto range=equal_range(bmods.begin(),bmods.end(),tarbmod);//在升序数组中统计bmods中和tarbmod值相等的区间,左开右闭ans+=distance(range.first,range.second);//区间范围长度}}cout<<ans<<'\n';return;
}
signed main(void){cin.tie(NULL)->sync_with_stdio(false);int T=1;cin>>T;while(T--){solve();}return 0;
}

多理解

http://www.jsqmd.com/news/674160/

相关文章:

  • 网络工程师-边界安全与远程接入实战(二):NAT 配置全解
  • 【仅限首批Early Access用户】EF Core 10向量扩展预发布配置包泄露:含OpenAI+Ollama双嵌入管道模板(限时48小时)
  • 企业级多模态RAG落地倒计时——Dify 2026正式版将于Q2强制启用多模态审计日志,你现在适配了吗?
  • SQL如何高效提取每组首条记录 ROW_NUMBER优化策略
  • 中国半导体展哪家好?国内优质展会甄选,本土芯势力平台 - 品牌2026
  • 雷军15小时一镜到底测SU7续航跑1313公里,撕下了汽车评测行业的遮羞布
  • 广州云计算培训学校排名:2026年优质机构推荐哪家好一文弄懂
  • 中国半导体展推荐?2026年优质半导体展赋能产业发展及展会推荐 - 品牌2026
  • AVIF 与 PNG:下一代图像格式如何改变网页视觉与性能
  • 中国半导体展会哪家好?2026年国内头部展会盘点助力 - 品牌2026
  • 打卡第8天|合并两个有序数组
  • python actionlint
  • 大模型应用误区:RAG与垂域模型到底啥关系?老板必看!
  • python github-actions
  • Java 电商平台中集成 AI 推荐系统:从模型训练到生产部署的完整实践
  • HTML5中List属性关联Datalist数据的底层逻辑
  • 儿童护眼灯推荐哪款品牌?深度对比书客、明基、孩视宝、柏曼等主流护眼台灯,真正护眼的到底是哪几款?一篇帮你选明白,选对少花冤枉钱!
  • 推送通知实现长连接与消息队列
  • **发散创新:智能合约安全中的重入攻击防御机制实战解析**在以太坊生态日益成熟
  • 谷歌seo最新优化方案是怎样的? | 放弃投流后,死磕SEO让独立站订单涨了40%
  • 软件测试:典型面试题库
  • 别再乱接线了!STM32新手必看的ST-LINK/V2与USB-TTL下载器保姆级接线图(附FlyMcu避坑指南)
  • 敏芮芯途敏宝长高奶粉,助力敏宝长高,超 90%宝妈信赖的选择!
  • 如何查看数据流的索引的创建时间
  • 运维转行网安:2026最新落地指南,从基础到实战,零弯路!
  • JVM各参数配置
  • FasterWhisperGUI在Windows系统无法启动?3个步骤彻底解决权限问题
  • 如何在5分钟内安装ModTheSpire:杀戮尖塔终极模组加载指南
  • STM32F103ZE驱动PMW3901光流模块,从SPI配置到数据读取的保姆级避坑指南
  • 8253定时器不止能做实验:一个老嵌入式工程师的方波生成实战笔记