最新要闻
- 主打优雅与科技感,荣威D7 EV外观正式亮相
- 中部战区空军某部官兵:在救灾一线传承红色基因
- 怀孕9个月一直吃西替利嗪可以吗
- 农文体旅“融”出活力,大运河畔感受精彩,扬州新城这个夏日“给你好看”
- 360网站设置为主页(360主页网址)
- 山东一烤鱼店燃气闪爆1死1伤
- 东方日升:南滨基地15GW(一期)异质结伏曦组件首片成功下线
- “五天三箭九星”,中国航天近期连续发射成功意味着什么?
- 辽宁省继续发布地质灾害气象风险预警
- 菁英战斗兵的飞机 菁英战斗兵
- 摄影师偶然拍到“红色精灵”闪电:画面壮观
- 岳阳机场回应停车场禁止特斯拉入内:特斯拉会对周围环境录像 员工的也不能进
- 杜拉拉升职记主题曲视频(杜拉拉升职记主题曲)
- 吉林省发布地质灾害气象风险黄色预警
- 开勒股份:储能产品于今年6月份刚对外发布 未来业务发展仍存在一定的不确定性
- 怒!红扑扑冬枣竟是用药水喷出来的!陕西一县现场销毁“药水冬枣”
广告
手机
安全卫士 实力霸榜! #一汽奔腾 多款汽车荣登 #中国汽车质量排行榜
违停还在网上找攻略,被罚辩称只停两分钟
- 安全卫士 实力霸榜! #一汽奔腾 多款汽车荣登 #中国汽车质量排行榜
- 违停还在网上找攻略,被罚辩称只停两分钟
- 山东高密燃气闪爆已致2死2伤
- 第一届全国学生(青年)运动会会歌、奖牌等正式发布
- 讯飞星火认知大模型V2.0将于8月15日发布
- 一高铁站9成是按摩椅?影院、医院等也被占领,共享按摩椅正在讨人嫌?
家电
[数论第四节]容斥原理/博弈论/NIM游戏
(相关资料图)
容斥原理
- \(|A\cup B\cup C|=|A|+|B|+|C|-|A\cap B|-|A\cap C|-|B\cap C|+|A\cap B\cap C|\)
- \(|\displaystyle \cup_{i=1}^n A_i |=\sum_{i}|A_i|-\sum_{i,j} |A_i \cap A_j|+\ldots +(-1)^{n+1}|\cap_{i=1}^n A_i |\)
- 时间复杂度:\(C_n^1+C_n^2+C_n^3···+C_n^n=2^n-1\) \(O(2^n-1)\)
- 等式右边有 \(2^n-1\) 项,每一项表示选取若干个集合相交的情况,可以通过DFS遍历每种选取的情况,也可以把每种选取的情况与一个二进制数相对应
- 该二进制数有n位,每一位表示一个集合,该位为1表示选取了该集合,为0表示不选取该集合,遍历 \(2^n-1\) 次即可遍历所有选取情况 \(O(n(2^n-1))\)
- 代码:
typedef long long LL;const int N = 20;int p[N];int n, m;int main(){ cin >> n >> m; for(int i = 1; i <= m; ++ i) cin >> p[i]; int res = 0; //记录答案 for(int i = 1; i < 1 << m; ++ i){ //遍历2^m-1次,即遍历所有的方案 int t = 1, cnt = 0; //记录当前p的倍数,以及p的个数 for(int j = 1; j <= m; ++ j){ //遍历m位,求出当前方案选取的质数及个数 if(i >> (j - 1) & 1){ cnt ++ ; //选取了当前位的质数,质数加一 if((LL)t * p[j] > n){ //判断质数的倍数是否超出范围 t = -1; break; } t = (LL)t * p[j]; //累乘当前位的质数 } } if(t != -1){ if(cnt % 2) res += n / t; //个数质数位奇数,则取加号 else res -= n / t; //否则取减号 } } cout << res; return 0;}
博弈论
- 公平组合游戏ICG
- 由两名玩家交替进行
- 在游戏的任意时刻,玩家执行的合法行动与轮到哪名玩家无关
- 不能行动的玩家判负
- 先手必胜状态:先手行动后将当前局面变为先手必败状态,由于另一个人是下一次的先手,则另一个人必败,故先手必胜
- 先手必败状态:先手无论怎样行动都无法将当前局面变为先手必败状态,则另一个人必胜,故先手必败
普通-NIM游戏
- 有 \(n\) 堆石子,每堆石子个数为 \(a_i\) 颗,先手和后手每次可以从某堆中拿任意颗石子,最后无法操作的一方判负
- 结论:当每堆石子的异或值 \(a_1 \wedge a_2 \wedge a_3 ···\wedge a_n=0\) 时 先手必败,否则先手必胜
- 证明:
- 当 \(a_1 \wedge a_2 \wedge a_3 ···\wedge a_n=x\neq0\) 时 设 \(x\) 的二进制中最高位的1在第k位,那么 \(a_1···a_n\) 中至少有一个数的二进制第k位也是1,设该数为 \(a_i\) 则 \(a_i \wedge x
- 当 \(a_1 \wedge a_2 \wedge a_3 ···\wedge a_n=x=0\) 时 假设先手在第i堆中拿走k颗石子能将剩余石子的异或值不变,则每堆石子的异或值为 \(a_1 \wedge a_2 \wedge a_3 ···\wedge (a_i-k)···\wedge a_n=a_1 \wedge a_2 \wedge a_3 ···\wedge a_i···\wedge a_n=x=0\) 异或满足消去律,所以有 \(a_i=a_i-k\) 故 \(k=0\) 矛盾,所以先手不可能将当前局面变成异为0的局面,故后手总是异或非0的局面,而后手总是可以将异或非0的局面变成异或为0的局面,因而先手总是会遇到异或为0的局面,最终所有石子为0的局面一定是先手遇到,故后手必胜,先手必败
- 当 \(a_1 \wedge a_2 \wedge a_3 ···\wedge a_n=x\neq0\) 时 设 \(x\) 的二进制中最高位的1在第k位,那么 \(a_1···a_n\) 中至少有一个数的二进制第k位也是1,设该数为 \(a_i\) 则 \(a_i \wedge x
台阶-NIM游戏
- 有一个n级台阶的楼梯,每级台阶上都有若干个石子,其中第i级台阶上有\(a_i\) 个石子(i ≥1)。两位玩家轮流操作,每次操作可以从任意一级台阶上拿若干个石子放到下一级台阶中(不能不拿)。已经拿到地面上的石子不能再拿,最后无法进行操作的人视为失败。
- 结论:当奇数台阶上石子的异或值 \(a_1 \wedge a_2 \wedge a_3 ···\wedge a_n=0\) 时 先手必败,否则先手必胜
- 石子只能从上一台阶往下一台阶拿,最终局面一定是某人把第一台阶上的石子拿到地面后结束,因此考虑奇数台阶石子异或值的情况
- 当先手遇到奇数台阶石子异或值非0时,将某奇数台阶上的若干石子拿到下一台阶后,总是可以将所有奇数台阶上的石子异或值变成0(见普通nim游戏的分析)。此时,后手总是会遇到奇数台阶石子异或值为0的情况
- 当后手从奇数台阶拿x石子放到下一台阶时,奇数台阶石子异或值一定变为非0(见普通nim游戏分析),此时,先手又可以将异或非0变成异或为0
- 当后手从偶数台阶拿x石子放到下一台阶时,先手可以顺次将下一台阶的x石子放到下下一台阶,保持奇数台阶异或为0的局面,所以后手总是会遇到奇数台阶石子异或值为0的情况,直到最后,后手会遇到第一台阶无石子可拿的情况,后手判负,先手必胜
- 当先手遇到奇数台阶石子异或值为0时,后手可以依据同样的策略使先手比败,后手必胜
集合-NIM游戏
- n堆石子,玩家可以从任意一堆石子中取走石子,但是每次取的石子个数必须在一个已知的集合S中,最后无法操作的人判负
- 结论:当每堆石子的sg异或值 \(sg(a_1) \wedge sg(a_2) \wedge sg(a_3) ···\wedge sg(a_n)=0\) 时 先手必败,否则先手必胜
- 集合nim与普通nim游戏的最大区别在于,拿走的石子数必须在一个给定的集合S中。
- 对于普通nim游戏,所有石子异或非0的局面总是能够变成异或为0的局面,异或为0的局面总是只能变成异或非0的局面,故而异或为0的局面总是由同一个人遇到,异或非0的局面总是让另一个人遇到,因此一开始通过石子的异或值就能确定谁是赢家。
- 对于集合nim游戏,是否有同一个局面只会让同一个人遇到的情况呢?答案是可以的。将每种局面抽象为一个图中的节点,一个局面可以到另一种局面就连一条有向边,因而每堆石头的取法都可以通过一个图表示,出度为0的节点表示结束局面
- 定义一个sg(x)函数,表示局面x的sg值,该值总是取到达不了的局面中的最小值,结束局面的sg值为0,能到结束局面的局面的值为1,同理,可以反推出每堆石头一开始的sg值
- 可以发现该sg值与普通nim游戏中异或值的情况有相似之处,即sg值为0的局面只能走到sg值非0的局面,sg值非0的局面总是可以走到sg值为0的局面
- 将每堆石头起始节点的sg值异或起来,sg异或值为0则先手比败,sg异或值非0则先手必胜(sg异或值为0的那一方总是遇到sg值异或值为0)
- 代码:
#include
#include #include using namespace std;const int N = 110;const int M = 1e4 + 10;int s[N], f[M]; //s[i]存储可以取的石子数,f[i]存储每个状态的sg值,每个状态用当前石子数表示int n, k;//dfs求sg值int sg(int x){ if(f[x] != -1) return f[x]; //记忆化搜索 unordered_set S; //储存可以走到的局面的sg值 for(int i = 1; i <= k; ++ i){ //遍历所有可以取的石子数量 int sum = s[i]; if(x >= sum) S.insert(sg(x - sum)); //将走到的局面的sg值存储 } for(int i = 0; ; ++ i) //从小到大遍历可能的sg值 if(!S.count(i)) //若该sg值是不能达到的sg中的最小值 return f[x] = i; //取该sg值}int main(){ cin >> k; for(int i = 1; i <= k; ++ i) cin >> s[i]; cin >> n; memset(f, -1, sizeof f);//别忘了初始化 int res = 0; while(n -- ){ int h; cin >> h; res = res ^ sg(h); //起点的sg异或值 } if(res) cout << "Yes"; else cout << "No"; return 0;}
拆分-NIM游戏
- 给定n堆石子,两位玩家轮流操作,每次操作可以取走其中的一堆石子,然后放入两堆规模更小的石子(新堆规模可以为0,且两个新堆的石子总数可以大于取走的那堆石子数),最后无法进行操作的人视为失败。
- 结论:==当每堆石子的sg异或值 \(sg(a_1) \wedge sg(a_2) \wedge sg(a_3) ···\wedge sg(a_n)=0\) 时 先手必败,否则先手必胜
- 补充sg定理:SG 定理适用于任何公平的两人游戏, 它常被用于决定游戏的输赢结果。计算给定状态的 Grundy 值的步骤一般包括:
- 获取从此状态所有可能的转换;
- 每个转换都可以导致一系列独立的博弈(退化情况下只有一个)。计算每个独立博弈的 Grundy 值并对它们进行异或求和。
- 在为每个转换计算了 Grundy 值之后,状态的值是这些数字的mex
- 如果该值为零,则当前状态为输,否则为赢。
- 由于玩家的操作是拿走一堆石子,放入两堆石子,因此原来一堆石子的局面变成了两堆石子的局面,而这两堆石头是同时出现,所以尽管是两堆石头,但是属于一个局面,由sg定理此局面的sg值 为 sg(x) = sg(x1) ^ sg(x2) (x -> x1 + x2 拿走x,放入x1,x2)
- 代码:
#include
#include #include using namespace std;const int N = 110;int f[N];int n;int sg(int x){ if(f[x] != -1) return f[x];//记忆化 unordered_set s; for(int i = 0; i < x; ++ i) for(int j = 0; j <= i; ++ j) //避免重复,约定第二堆的数量小于等于第一堆 s.insert(sg(i) ^ sg(j)); //两个石子为一个局面,由sg定理:两个石子的sg异或值为当前局面的sg值 for(int i = 0; ; ++ i) //选取不存在的最小的自然数 if(!s.count(i)) return f[x] = i; }int main(){ cin >> n; memset(f, -1, sizeof f); int res = 0; while(n -- ){ int x; cin >> x; res ^= sg(x); } if(res) cout << "Yes"; else cout << "No"; return 0;}
- 公平组合游戏ICG
关键词:
[数论第四节]容斥原理/博弈论/NIM游戏
二分
受强降雨影响 辽东沿海流域碧流河茧场站超警戒水位0.38米
11岁男孩跳楼案宣判,班主任无罪
主打优雅与科技感,荣威D7 EV外观正式亮相
马德兴:朝鲜宣布退出巴黎奥预赛,中国国奥出线形势更严峻
安全卫士 实力霸榜! #一汽奔腾 多款汽车荣登 #中国汽车质量排行榜
分享油焖茄子最简单的做法,不用炸 ,超下饭
手术室里为何传出动画片主题曲?原来是7岁男童在边看动画边做手术
上海健康医学院附属崇明医院新增一专家门诊
海泰科(301022)8月10日主力资金净卖出1037.51万元
港股恒指涨0.37%,阿里巴巴涨超3%,花样年控股复牌跌26%
中部战区空军某部官兵:在救灾一线传承红色基因
违停还在网上找攻略,被罚辩称只停两分钟
海南村VA:庆祝动作大比拼
年产约6亿元!巴彦淖尔这一项目预计9月投产
太湖县多措并举推进药品集采落地惠民
怀孕9个月一直吃西替利嗪可以吗
农文体旅“融”出活力,大运河畔感受精彩,扬州新城这个夏日“给你好看”
谷歌Chrome浏览器iOS版发布116稳定版更新
牧原股份(002714.SZ):会根据经营情况适当调整产能建设进度
游戏《装甲核心6》已预载:8月25日发售
山东高密燃气闪爆已致2死2伤
合肥一商户卖6瓶假酒,退赔3万8还罚了3万!
第一届全国学生(青年)运动会会歌、奖牌等正式发布
讯飞星火认知大模型V2.0将于8月15日发布
业务经办“免、减、简” 南通打造高效便捷医保服务
360网站设置为主页(360主页网址)
巴基斯坦瓜达尔港中方车队遇袭:防弹车受枪击,23名中方人员安全
山东一烤鱼店燃气闪爆1死1伤
小贝夫妇晒女儿与梅西牵手照 这也太让人羡慕了吧!
《潜行者》大结局烂尾!5大败笔和槽点,令该剧成降智搞笑谍战剧
跨境电商软件 跨境电商系统
乾坤挪移,资产隔离,债务爆雷前夜碧桂园掌门人紧急捐出64亿
6500cpu配什么主板(6500c)
鞭牛周报:阿里Q1营收2342亿元;理想Q2净利润23亿元;小米大模型首次曝光
郑州机场国际快件中心启用 助推跨境电商业务发展
如果开发商降价20%卖期房,我劝你“慎买”!
国务院:探索便利化的数据跨境流动安全管理机制
一高铁站9成是按摩椅?影院、医院等也被占领,共享按摩椅正在讨人嫌?
国务院印发《关于进一步优化外商投资环境 加大吸引外商投资力度的意见》
东方日升:南滨基地15GW(一期)异质结伏曦组件首片成功下线
把救人放在第一位!民辅警接力跳入河中勇救落水女子
刹车总泵故障判断 刹车踩着慢慢泄压有哪些原因
圣诞送礼指南令女孩欢喜的雨鸟5000更换术
“五天三箭九星”,中国航天近期连续发射成功意味着什么?
周大福黄金价格今天多少一克(2023年08月13日)
新华全媒+|进一步完善我国天基灾害监测体系 陆地探测四号01星顺利升空
去美国读商科研究生需要什么条件呢
电脑删除sd卡恢复文件怎么办
有一种康养,叫商洛生活!
市城管局:助力早夜市餐饮经济健康发展
文明新风“吹散”陈规陋习
中际旭创(300308.SZ):目前800G出货或在手订单中,单模比例更高
《魔镜物语》如何快速获得钻石?快速获得钻石方法介绍
广东海事局发布航行警告:8月14日南海海域预计有火箭残骸落区
巴基斯坦安全部队在俾路支省瓜达尔开展反恐行动,打死2名恐怖分子
泰和新材(002254.SZ):高效智造间位芳纶产业化项目正常推进之中
C视觉·每日一图丨成都清晨的勾月晨霞(2023年8月13日)
辽宁省继续发布地质灾害气象风险预警
人工智能车手GT Sophy漂移跑法突破玩家想象力
《中华史册——新疆出土文献展》在乌鲁木齐开展
国家防办、应急管理部会商部署重点地区防汛防台风工作
488家药企去年销售费用超3000亿,学术会议卷入反腐风暴,合规边界成争议焦点
大江时评:“新三样”走俏,折射“中国创造”加速跑
米哈游总裁刘伟致辞《原神》嘉年华:感谢玩家 我们枫丹见!
阳光诺和:多名股东拟合计减持不超4%
电力北斗服务支撑无人机规模化应用
谈谈笔者身边小餐饮从业者受到的压迫
威海市临港区蔄山镇:美德信用进乡村 立心铸魂促振兴
苹果macOS 13.5更新受困:无法管理应用定位服务
平安呈贡|呈贡警方“火力全开” 圆满完成火把节安保任务
冠军上单道心破碎,KT零封韩华!玩家:Viper和EDG双输,能怪谁?
暑期孩子在家 须防运动受伤
华东医药(000963.SZ):乌司奴单抗注射液用于成年中重度斑块状银屑病的上市许可申请获受理
曾伯怡率队深入乡镇街道督导防溺水工作
灵活就业人员杭州如何参加职工养老保险?如何缴费?费用如何计算?
上半年泰安13个重点产业链实现营收1252亿元
辽原筑机:开启努力且美好的一天!
注册hotmail邮箱能查到归属地吗(注册hotmail邮箱)
服贸会期间石景山区将每日部署78处交通岗位便利市民出行
上海交警:南浦大桥交通措施优化调整,有效提升车速!
菁英战斗兵的飞机 菁英战斗兵
应付股利会计分录例题及解析 应付股利会计分录
CBA最新消息!曝哈斯加盟辽宁,孙铭徽宣布离队,广东老臣走人
揭阳茂华长安4s店(冬天怎么快速减肥)
长沙未来一周雷雨常“突袭”,注意防范短时强降水
绑架罪敲诈勒索罪的区别
摄影师偶然拍到“红色精灵”闪电:画面壮观
岳阳机场回应停车场禁止特斯拉入内:特斯拉会对周围环境录像 员工的也不能进
又来了,这次是这个区的暴雨橙色预警!
马刺专场!波帅驱逐主持人,帕克揶揄詹姆斯,哈蒙致谢恩师
优秀!洋河别人家的孩子么
从20万降到13万,车长近5米,当年比丰田凯美瑞还风光,如今却无人问津
校运会400米加油稿50字左右
王者荣耀妲己星元皮肤甜甜糕获取方法
杜拉拉升职记主题曲视频(杜拉拉升职记主题曲)
祝寿成语简短经典 祝寿成语
宁波公交余姚303路(关于宁波公交余姚303路简述)
“中新爱眼季·首届中新合作角膜塑形镜研讨会”在两江新区举行