博弈论
goto_1600
我何来寂寞,哪有寂寞可言。
展开
-
1927. 求和游戏
link 题意: 简述一下题意就是alice和bob轮流将数字0-9填入?,alice想左右数字和差不为0,bob想差值为0,问谁可以赢。 思路: 博弈的题是真头大了,一开始想的alice肯定让差值变大,填9,然后遗漏了很多性质,下面依次考虑一下遗漏的性质,考虑问号的数量,如果加起来是奇数那么一定输,因为alice可以操作最后一次,假设d为两者相同的最后一个取值,alice不选这个即可,然后考虑左右的问号数,由于差值变大,后者最好要重复上一次的操作,最后只变成了一边有问号了,那么肯定是偶数数量的问号,每一原创 2021-11-01 13:51:15 · 278 阅读 · 0 评论 -
D. Deleting Divisors(博弈,思维)
链接 题意 :简要来说就是双方玩游戏,假设当前数为n,那么每次可以减去除了1和本身的因数,最后不能操作的话就输了。 思路: 也是个类似于sg函数打表找规律题,由于必胜态不可能是偶数,那么我们肯定尽量要让对方变成奇数,怎么操作呢?如果当前数是奇数,那么我方肯定输,当前数是偶数的话,如果含有除了2的质因子也是必赢,因为每次我们可以减奇数,让对方变成奇数,如果全含2的话,可以发现,如果当前数是2^i次,我们只能操作减去2的i-1次,因为减去其他,让对方变为偶数肯定是不行的,只要判断2的次幂是奇偶就行啦。 代码:原创 2021-06-21 19:56:10 · 237 阅读 · 0 评论 -
7-7 Game of Cards 找规律
思路:找出必败态 打出sg函数的表 硬找规律! #include<bits/stdc++.h> using namespace std; #define x first #define y second typedef long long ll; int qsm(int a,int b,int c) { int res=1; while(b) { if(b&1) res=res*a%c; b>>=1; a=a*a%c; } return res; }原创 2020-11-05 18:46:18 · 259 阅读 · 0 评论 -
博弈论
sg定理 如果所有的sg值异或起来非0那该方必胜。 可以通过证明,证明如下: 假设所有sg的异或值为x sg(i)能变小成为sg(i)x 然后带入就变成0了 最后游戏结束的条件也是0 那么在有胜势的一方可以通过精妙的操作让下方永远为0 所以下方必输,太厉害了,佩服佩服。 下面是几道acwing的例题。 题目1 这道题可以抛砖引玉,引出博弈论,思路就是异或所有值,如果不是0必胜,反之必输。 题目2 ...原创 2020-02-17 22:15:17 · 283 阅读 · 0 评论