您当前的位置: 首页 >  游戏

MangataTS

暂无认证

  • 0浏览

    0关注

    423博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

AcWing 891. Nim游戏(nim博弈)

MangataTS 发布时间:2022-02-16 18:29:46 ,浏览量:0

题目链接

https://www.acwing.com/problem/content/893/

思路

这个题目需要清楚一个概念:

  • 必胜态:我们能通过一个操作使得局面变成必败态
  • 必败态:无论如何操作都不能变成必胜态

如果当前的石子堆的数量都是成对出现的,那么一定是必败态,因为此时先手无论如何操作,后手都能做一个镜像的操作,最后先手就不能进行操作,所以此时先手必败,然后我们也知道全0也是必败态,我们其实可以从结果反推到我们开始的状态,如果当前的局面为成对出现那么此时的局面就是必败态,否则为必胜态,所以我们将每一堆的石子数异或起来(相同的数异或为0)最后判断局面就好啦

代码
#include
using namespace std;
//----------------自定义部分----------------
#define ll long long
#define mod 1000000007
#define endl "\n"
#define PII pair
#define INF 0x3f3f3f3f

int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};

ll ksm(ll a,ll b) {
	ll ans = 1;
	for(;b;b>>=1LL) {
		if(b & 1) ans = ans * a % mod;
		a = a * a % mod;
	}
	return ans;
}

ll lowbit(ll x){return -x & x;}

const int N = 2e6+10;
//----------------自定义部分----------------
int t,n,m,q,a[N];
void slove(){
	cin>>n;
	int res = 0;
	for(int i = 1;i >a[i],res ^= a[i];
	if(!res) cout            
关注
打赏
1665836431
查看更多评论
0.0900s