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

题解:P9187 [USACO23OPEN] Field Day S

全世界都在研究怎么赢,只有我在大输特输。

如此状态,如何 NOIP?

题面简述

link

给出 \(N\) 个长为 \(C\) 的字符串,每个字符串由 GH 组成,对于每一个字符串,求出它和其它字符串同一位置字符不同的最大值。

解题思路

注意到 \(C\) 仅有 18,我们可以把字符转换成二进制数字,此时问题转化为:求 \(\max_{j = 1}^{n} \text{popcount}(a_i \oplus a_j)\)。其中 \(\text{popcount}\) 为数字在二进制下的位数。

考虑如何求解。我们知道 \(a_i\) 按位取反之后有当前答案最大,为了方便我们设 \(a_i\) 取反后的数为 \(b_i\),如果知道在剩下的数字当中和 \(b_i\) 不同的位数最小的数字为 \(a_j\),此时有 \(C - \text{popcount}(a_j \oplus b_i) = \max_{k = 1}^{n} \text{popcount}(a_i \oplus a_k)\)\(\text{popcount}(a_j \oplus b_i)\) 翻译成人话就是 \(a_j\)\(b_i\) 在二进制下同一位置数字不同的数量。

这其实很好理解,因为每一位只有两种情况,我们又知道 \(a_i\)\(b_i\) 的每一位都不同,此时我们知道有一个 \(a_j\)\(b_i\) 在二进制下共有 \(x\) 位不相同,那么就有 \(a_i\)\(a_j\)\(x\) 位相同,即 \(a_i\)\(a_j\)\(C - x\) 位不同。

现在我们要知道 \(\text{popcount}(a_j \oplus b_i)\) 该怎么做?首先枚举每个 \(a_j\) 肯定不行,但是由于 \(C\) 比较小,也许可以一位一位的考虑。

对于每一个 \(a_i\),我们改变它二进制下某一位上的数字,会得到一个新的数字,再用新的数字重复这个操作,在第 \(x\) 次操作后 \(a_i\) 就会变成 \(b_j\),这个操作数 \(x\) 即为 \(\text{popcount}(a_i \oplus b_j)\),也是 \(b_j\) 变成 \(a_i\) 的最小操作次数。
我们对每一个数都这样做,发现这就是一个 bfs 的过程。这样就可以得到从 \(0\)\(2^C - 1\) 之间的每一个数变成已有数字的最小操作次数,现在我们只需要枚举一遍所有 \(b_i\) 就能求出答案了。

我写还是比较详细的(也许有些啰嗦?)但是可能还是有些抽象,还有不懂的话可以结合代码理解。

代码

#include <bits/stdc++.h>
using namespace std;const int MN = 1e5 + 3;
int C, n;
int a[MN], rec[1 << 18];queue<pair<int, int> > q;int main() {ios::sync_with_stdio(0);cin.tie(0);cin >> C >> n;memset(rec, -1, sizeof(rec));for (int i = 1; i <= n; i++) {for (int j = 1; j <= C; j++) {char c;cin >> c;a[i] = (a[i] << 1) + (c == 'G' ? 0 : 1);}rec[a[i]] = 0;q.push({a[i], 0});}while (!q.empty()) {auto [x, cnt] = q.front();q.pop();for (int i = 0; i < C; i++) {int y = x ^ (1 << i);if (rec[y] < 0) q.push({y, rec[y] = cnt + 1});}}for (int i = 1; i <= n; i++)cout << C - rec[(1 << C) - 1 - a[i]] << "\n";return 0;
}

念念碎

本次模拟赛又双叒叕大 bear 归,非常的心痛,故作此文缓解一下。

你知道的,我没有那么聪明,所以本篇文章是在学习这篇题解后写的,拜谢大佬。

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

相关文章:

  • 【IEEE和ACM双出版 | 连续4届稳定EI检索 | 会议录用率高】第五届计算建模、仿真与数据分析国际学术会议(CMSDA 2025)
  • c++ 3
  • 【2025-11-24】又到周末
  • 2025年广告边框铝型材制造厂权威推荐榜单:葡萄架铝合金型材/门窗铝合金型材/工业铝型材源头厂家精选
  • ECCV 2024!面向领域泛化分割的文本查询驱动掩码Transformer| 语义分割 | 计算机视觉
  • 刘二大人PyTorch深度学习实践第二讲笔记
  • 最新榜单出炉!2025年成都必吃火锅排行榜,美食/烧菜火锅/特色美食/火锅/社区火锅成都火锅品牌口碑推荐榜
  • C# 多线程(学习笔记13)
  • 【SPIE出版 | 连续四届均实现EI SCOPUS双检索 | 最快会后3个月检索】第五届计算机、信息工程与电子材料国际学术会议(CTIEEM 2025)
  • (让 Java IA MCP 更简单 )Solon AI v3.7.2 发布
  • Unity 使用Blit生成图片踩的坑
  • P14568 【MX-S12-T3】排列
  • 2025年辊压磨批发厂家权威推荐榜单:超细环辊磨/环辊磨粉机/辊压磨设备源头厂家精选
  • SQL分区裁剪 - --
  • 2025 防水型压力传感器十大品牌推荐:硬核防护,赋能多元场景
  • 2025年防爆仪表箱品牌权威推荐榜单:防爆接线箱/防爆控制箱/防爆正压柜源头厂家精选
  • 2025年温度监控系统直销厂家权威推荐榜单:炉温仪‌/测厚仪‌/炉温测试仪‌源头厂家精选
  • 2025年包头钢材/无缝钢管/螺纹管/型材/钢板行业场实力厂家盘点:优质源头厂家精选指南
  • 2025 最新太原山西菜馆推荐!权威测评认证的山西菜馆排行榜,探寻非遗传承与地道风味的匠心之选
  • connect()前两个参数是什么?
  • 咱鹤壁家长补课不踩坑!2026年鹤壁一对一辅导机构最新测评榜单
  • 完整教程:PyTorch CV模型实战全流程(二)
  • 2025 儿童镜框十大品牌推荐,近视防控适配首选榜单
  • 2025年纸鞋撑机械制造企业权威推荐榜单:自动纸鞋撑机‌/纸鞋撑设备‌/鞋撑定型机械设备‌源头厂家精选
  • 如何快速低成本自建埋点系统?基于ClkLog的开源解决方案
  • 2025年可提升式管式曝气器企业权威推荐榜单:可提升曝气器/可提升微孔曝气器/可提升式曝气器源头厂家精选
  • 完整教程:程序员收藏!AI大模型教程(全面详解)从入门到精通,一篇就够了!
  • iar stm32 cubemx 报错解决备忘录 :failed to get cpu status after 4 retries retry
  • 2025 年 11 月中国水泵厂家权威推荐榜:消防/多级/自吸/磁力/排污/真空/离心/卧式水泵品牌实力与创新技术深度解析
  • 2025年磷酸氢二钠批发厂家权威推荐榜单:磷酸二氢钠/磷酸供货厂家/磷酸氢二钾源头厂家精选