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

做网站关键词软件沈阳百度推广优化

做网站关键词软件,沈阳百度推广优化,泉州专业建站,网站建设套模版目录 概述 思路 解题过程 Code 复杂度 总结 概述 Luogu P2197: 甲,乙两个人玩 nim 取石子游戏。 nim 游戏的规则是这样的:地上有 n 堆石子(每堆石子数量小于 104),每人每次可从任意一堆石子里取出任意…

目录

概述

思路

解题过程

Code

复杂度

总结


概述

Luogu P2197:

甲,乙两个人玩 nim 取石子游戏。

nim 游戏的规则是这样的:地上有 n 堆石子(每堆石子数量小于 104),每人每次可从任意一堆石子里取出任意多枚石子扔掉,可以取完,不能不取。每次只能从一堆里取。最后没石子可取的人就输了。假如甲是先手,且告诉你这 n 堆石子的数量,他想知道是否存在先手必胜的策略。

输入格式

本题有多组测试数据。

第一行一个整数 T (T≤10),表示有 T 组数据

接下来每两行是一组数据,第一行一个整数 n,表示有 n 堆石子,n≤104。

第二行有 n 个数,表示每一堆石子的数量.

输出格式

共 T 行,每行表示如果对于这组数据存在先手必胜策略则输出 Yes,否则输出 No

输入输出样例

输入 #1

2
2
1 1
2
1 0

输出 #1

No
Yes

博弈论属于运筹学领域的一个关键分支,我们先来简单了解一下其基本要素:

我们要假设参与博弈的双方都是神,无所不知,可以瞬间推导出每次行动后直到博弈结束的所有可能局面,他们在每轮博弈中作出以下行为:

  • 最佳回应(Best response):依据对手的行动,选择能带来最高收益的行动。
  • 占优策略(Dominant strategy):无论对手采取何种策略,该策略始终是最佳选择。
  • 纳什均衡(Nash equilibrium):在这种状态下,玩家们的策略达到均衡,即双方都采取了对自己最优的决策。

是谓“泰山崩于前而色不变,麋鹿兴于左而目不瞬,然后可以制利害,可以待敌。”

结合题目,那么我们来想一想这个事。


思路

双方会永远向着对自己最有利的方向拿取石子,双方的博弈是一个无所不知的过程,他们知道此次行为后的所有局面,可惜我们是凡人,不能推演所有的情况,所以我们需要来找规律。

已知:

  • 有初态第i堆石子的个数为a[i] > 0。
  • 有末态所有堆石子个数a[i] = 0,这是某个人输的状态。

在末态,\bigotimesa[i] = 0。(\bigotimes,即XOR异或和,意为a[0]^a[1]^...^a[n - 1])。

在末态的前一个状态,存在一个a[i] ≠ 0,即 \bigotimesa[i] ≠ 0:这对于把当前态操作到末态的人来说是必胜态,随后,他把末态丢给另一个人,即末态对于另一个人是必输态。

这或许是一个有用的性质,即我们可以对异或和做一些文章。

我们来证明两个神奇妙妙性质:

  1. 当前状态:\bigotimesa[i] ≠ 0,则至少存在下一个状态使得\bigotimesa[i] = 0。
  2. 当前状态:\bigotimesa[i] = 0,且a[i]不全为0,则下一个状态必是\bigotimesa[i] ≠ 0。

1.证明:{

        设当前状态\bigotimesa[i] = a[0]^a[1]^...^a[x]^...^a[n - 1] = s ≠ 0。

        设s的二进制最高位1为第k位,则必有奇数个a的k位是1,这些奇数石头堆里选一堆a[x],a[x] ^ s < a[x],(a[x] = xxx1xxx, s = 0001xxx, a[x] ^ s = xxx0xxx < a[x])

        从a[x]拿走一些石头使得剩余石头数目变为a[x] ^ s,则下一个状态:

        \bigotimesa[i] = a[0]^a[1]^...^a[x] ^ s ^...^a[n - 1]

                   = a[0]^a[1]^...^a[x] ^...^a[n - 1] ^ s (异或运算满足交换律)

                   = s ^ s 

                   = 0

                  得证。

}

2.证明{

        设当前状态\bigotimesa[i] = a[0]^a[1]^...^a[x]^...^a[n - 1] =  0,且a[i]不全为0。

        则在每个二进制位上,所有a加起来有偶数个1,随便找一堆石头,再随便拿几个,其二进制1的数目一定发生变化,使得下一个状态\bigotimesa[i] ≠ 0。

}


解题过程

有了这两个性质,先手就可以逼死后手。

如果甲先手,且初态\bigotimesa[i] ≠ 0,他就可以构造下个状态\bigotimesa[i] = 0甩给对手,乙只能构造再下个状态\bigotimesa[i] ≠ 0回给甲,二者交替,最后一次甲构造所有a[i] = 0绝杀乙。

二者都是神,甲永远找到构造路径踢死乙,由于\bigotimesa[i] = 0只能构造出\bigotimesa[i] ≠ 0,乙永远无力回天。

因此,甲能否获胜在一开始就决定了:胜利条件是甲先手且初态\bigotimesa[i] ≠ 0。


Code

#include <bits/stdc++.h>
using namespace std;
const char* solve(int n){int res = 0;while(n--){int a; cin >> a;res ^= a;}return res ? "Yes\n" : "No\n";
}
int main(){int T; cin >> T;while(T--){int n; cin >> n;cout << solve(n);}return 0;
}

复杂度

时间复杂度: O(n) 

空间复杂度: O(1) //不储存数组,即刻输入输出。


总结

主播主播,Nim游戏还是太吃操作了,有没有更简单的解?有的兄弟,博弈论问题存在一类通解:SG函数,我们将在未来进行讲解。

http://www.dtcms.com/wzjs/324180.html

相关文章:

  • 河北省住房和城乡建设委员会官方网站网站建站设计
  • 国土局网站建设制度免费发布推广的平台
  • wordpress推广浏览插件网站seo排名优化工具
  • 外贸网站建站电话多少域名注册查询工具
  • 西安网站制作顶尖公南宁百度seo公司
  • 网站建设怎么找客户关键词免费网站
  • 网站建设外包需要多少钱谷歌推广网站
  • 定州网站建设兼职河南省人民政府
  • 网站图片翻页效果如何做如何开网站呢
  • 找北京赛车网站开发bt磁力狗
  • 哎呀哎呀视频在线观看浙江企业seo推广
  • win7 wordpressseo编辑培训
  • 东莞市南城装饰工程东莞网站建设起名最好的网站排名
  • 狮山网站建设公司友链通
  • 网页无法访问此页面宁阳网站seo推广
  • 建设部网站证书查询个人开发app最简单方法
  • 手机企业网站制作关键词提取
  • 怎么做物物交换网站广东病毒感染最新消息
  • 网站制作教程 百度文库seo成创网络
  • 宜昌哪有有做网站的网络推广教程
  • 中石化网站是哪个公司做的近期国内新闻热点事件
  • 苹果公司网络营销方式seo案例分析方案
  • 网站建设市场需求分析南宁推广软件
  • 市北区开发建设局 网站百度链接提交收录入口
  • 网站下要加个备案号 怎么做鹤壁网站seo
  • 扬中市住房和城乡建设局网站seo建站收费地震
  • 每种类型的网站应该选择怎样的web服务器长沙岳麓区
  • 杭州网站建设及推广长沙专业做网站公司
  • 精品资源共享课网站建设 碧辉腾乐seo软文是什么
  • 做设计找图片的网站全网营销有哪些平台