博弈论
第二天:菜无止境。。。(只会找规律)
Question_A
打表好难哦,SG理解不过来……;
大概就是求除下一可能状态以外的最小正整数;
附个打表码吧:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 100;
int SG[maxn], vis[maxn];
int main() {
SG[1] = 0;
for (int i = 2; i <= 30; i++) {
memset(vis, 0, sizeof(vis));
for (int j = 1; j*2 <= i; j++)
vis[SG[i-j]] = 1;
for (int j = 0; ; j++)
if (!vis[j]) {
SG[i] = j;
break;
}
printf("%d ", SG[i]);
}
printf("\n");
return 0;
}
反正最后SG亦或一下
Question_B && Question_C
经典的巴什博奕:n%m+1;
Question_D
这题有点尴尬(省略号)
Question_E
直接演草纸找规律(三的倍数)
Question_F
感觉这一题好坑我想了半天。谁知道利用对称性,应该就和经典的巴什博奕差不多一个意思,根据对手下棋(╥╯^╰╥),太菜了。
Question_G
斐波那契博弈(Fn=F(n-1)+F(n-2))
Question_K && Question_L
亦或就完事了....
Question_M
威佐夫博弈
floor()函数:求小余它的最大正整数;
结论:
(中括号表示取整), ;符合其条件为必败态;
应用时:
if(a>b){
int t=b;
b=a;
a=t;
}
int aa=floor((b-a)*x);
//a==aa时为必败态,为啥是floor不懂