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

一种因子游戏【牛客tracker 每日一题】

一种因子游戏

时间限制:1秒 空间限制:256M

网页链接

牛客tracker

牛客tracker & 每日一题,完成每日打卡,即可获得牛币。获得相应数量的牛币,能在【牛币兑换中心】,换取相应奖品!助力每日有题做,丰盈牛币日益多!

题目描述

A l i c e AliceAliceB o b BobBob正在玩打牌游戏。他们两人手里各有N NN张牌,每张牌上都写着一个正整数,两个人都知道对方手里的所有牌上的数字。游戏规则如下:
每回合,A l i c e AliceAlice先从自己手里剩余的牌中挑一张打出。然后B o b BobBob观察打出的牌上面的数字,再从自己手里剩余的牌中挑一张打出。如果该回合中B o b BobBob打出的牌与Alice打出的牌上的数字不互质(即最大公因数大于1 11),则A l i c e AliceAlice获胜,游戏结束;否则继续进行下一回合,若双方都没有牌了,则B o b BobBob获胜。
A l i c e AliceAliceB o b BobBob都足够聪明。现在现在你提前得知了他们两个人手中的牌,请你判断最后谁能获胜。

输入描述:

第一行一个正整数N ( 1 ≤ N ≤ 500 ) N(1≤N≤500)N1N500,含义如上所述。
第二行N NN个以空格隔开的正整数a i ​( 1 ≤ a i ≤ 500 ) a_i​(1≤a_i≤500)ai1ai500,表示A l i c e AliceAlice手中的牌。
第三行N NN个以空格隔开的正整数b i ( 1 ≤ b i ≤ 500 ) b_i(1≤b_i≤500)bi1bi500,表示B o b BobBob手中的牌。

输出描述:

A l i c e AliceAlice获胜,输出字符串A l i c e AliceAlice,否则输出B o b BobBob

示例1

输入:

3 1 3 15 1 3 14

输出:

Bob

解题思路

本题是博弈策略 + 二分图完美匹配的综合应用题,核心是将双方的最优博弈转化为互质配对的最大匹配问题,通过匈牙利算法高效求解。

博弈模型等价转化

Bob获胜的充要条件是:存在一种一一配对的方案,使得每一对Alice的牌与Bob的牌都互质。

该问题可严格映射为二分图匹配模型:

由Hall定理可严格证明:若不存在完美匹配,则必然存在Alice的一个子集,其可匹配的Bob牌数小于子集大小,Alice优先打出该子集即可确保胜利。

算法实现:匈牙利算法

采用DFS增广的匈牙利算法求解二分图最大匹配:

  1. 预处理邻接矩阵:对每一对Alice与Bob的牌计算gcd,若互质则连边。
  2. 依次为每个左部节点寻找增广路,通过访问标记数组避免重复遍历右部节点。
  3. 若某个左部节点无法找到增广路,说明最大匹配小于n nn,直接判定Alice获胜。
  4. 若所有左部节点都匹配成功,说明存在完美匹配,判定Bob获胜。

算法时间复杂度为O ( n 3 ) O(n^3)O(n3)(邻接矩阵实现),n = 500 n=500n=500时运算量可控,完全适配1秒时间限制。

总结

核心逻辑:将博弈胜负判定转化为互质二分图的完美匹配存在性问题,通过匈牙利算法求解最大匹配,根据匹配是否满员判定胜负。
关键操作:gcd判定连边、DFS增广匹配、匹配失败提前终止判定Alice胜。
效率保障:500节点规模的匈牙利算法实际运行效率充足,无需更复杂的网络流实现。

代码简要说明

  1. 邻接矩阵构建:二维数组G[x][y]标记Alice第x张牌与Bob第y张牌是否互质,通过内置__gcd函数计算判断。
  2. 匈牙利DFS函数:遍历所有右部节点,若节点未访问且存在连边,则尝试匹配;若该节点未被匹配,或其原匹配点可找到新的增广路,则更新匹配关系并返回成功。
  3. 匹配主循环:逐个处理Alice的每张牌,重置访问数组后执行DFS增广;若任意一张牌无法匹配,直接输出Alice并结束程序。
  4. 结果输出:若全部节点匹配成功,输出Bob;否则提前输出Alice
  5. 输入优化:关闭流同步并解绑tie,提升输入输出效率,适配数据规模。

代码内容

#include<bits/stdc++.h>usingnamespacestd;#defineendl'\n'typedeflonglongll;typedefunsignedlonglongull;typedefvector<vector<ll>>vvt;typedefpair<ll,ll>pll;constll N=1e3+10;constll INF=1e18;constll M=1e6+10;constll mod=1e9+7;ll n;ll A[510],B[510];boolG[510][510];ll mt[510];boolvis[510];boolDFS(ll x){for(ll y=1;y<=n;y++){if(!vis[y]&&G[x][y]){vis[y]=1;if(!mt[y]||DFS(mt[y])){mt[y]=x;return1;}}}return0;}voidsolve(){cin>>n;for(ll i=1;i<=n;i++)cin>>A[i];for(ll i=1;i<=n;i++){cin>>B[i];for(ll j=1;j<=n;j++)G[j][i]=(__gcd(A[j],B[i])==1);}for(ll i=1;i<=n;i++){memset(vis,0,sizeof(vis));if(!DFS(i)){cout<<"Alice\n";return;}}cout<<"Bob";}intmain(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);solve();return0;}
http://www.jsqmd.com/news/1139022/

相关文章:

  • Spring AOP面向切面编程-从注解到实战
  • 实验7-1:自媒体运营分析-数据清洗与预处理 实验报告
  • X4Val:面向多源非配对数据的鲁棒模型评估方法论
  • 2026年6月亲测:卓廷金税预警敏感
  • Linux 移动重命名 mv、删库跑路 rm 与打包压缩 tar 核心命令通关秘籍
  • LangChain:Loop Engineering才是未来核心竞争力!
  • 电力负荷预测和能源调度能用AI吗?深度解析AI Agent在新型电力系统中的应用实战与主流方案盘点
  • OpenAI GPT-5.6明日发布,借对手危机实现降维打击,AI竞争迈入实用主义时代
  • 单片机程序常用的消息队列
  • 计算机毕业设计之jsp旅行社网站的设计与实现
  • Trae:面向电子取证的可编程自动化代理与Skills机制解析
  • SKILL.md 文件怎么写?(手把手教程)
  • 刚性编队控制:去中心化无人机集群的SE(3)分布式实现
  • 全网资源下载终极指南:一键获取微信视频号、抖音、快手等平台内容
  • 36岁大龄前端转行AI大模型应用开发的思考
  • 2026高性价比数字人平台怎么选?从预算、口型、批量出片到商用权限一次讲清(CSDN投稿优化版)
  • 无源RFID标签在贵重固定资产远程监控中的应用边界与性能测试
  • 30天爆卖超500万元,这家深圳工具品牌让欧美巨头坐不住了 | 品牌出海
  • Krea2高清成片链升级:原生4K/6K AI绘画技术解析与实践
  • ROP-RAS3:面向嵌入式平台的在线POMDP长时域规划框架
  • NOV Chart for .NET 2026.1使用调色板填充模式自定义图表外观
  • 水面无人艇无GPS协同绕靶:分布式感知与共识控制实战
  • 企业AI问答系统为啥用不了?RAG链路优化全攻略!
  • 别再走弯路!2026亲测好用的AI写作辅助软件|实测避坑硬核版
  • 开发者平台和国产AI基础设施的叙事
  • 脑后二维码技术解析:从图像生成到AR特效的实现原理
  • 百年IBM:从打孔卡到量子计算,一部跨越世纪的科技史诗
  • 分布无关的谱风险控制:自动驾驶安全规划新范式
  • VXLAN + EVPN 分布式部署
  • 光伏储能一体机系统设计:从5kW户用到500kW工商业的3种典型配置方案