Hoja de preguntas de kuangbin del tema de teoría de juegos (Bash, Wizov, nim, juego de fib) + tabla de funciones SG

Practica antes del partido provincial, vuelve a recuperar

Juego de bash: dos personas toman una pila de n elementos, cada uno toma al menos uno, y como máximo m, preguntan a la persona que se llevó la última victoria.
Condición de juicio: n% (m + 1)! = 0

cin>> n>>m;
if (n%(m+1)!=0)
	cout<<first win<<endl;
else
	cout<<second win<<endl;

Juego de Wizov: dos pilas de elementos a, b, dos personas se turnan para tomar, no hay límite superior para tomar al menos uno de una pila, o la misma cantidad de elementos de dos pilas. El punto de juicio ganador de la persona que tomó las dos últimas pilas
: (ba) * (1 + sqrt (5)) / 2, b es el valor máximo en ab,

cin>>a>>b;
if(a>b) swap(a,b);
int temp=(b-a)*(1+sqrt(5))/2;
if(temp==a) cout<<second win<<endl;
else cout<<first win<<endl;

Juego de Nim: hay n pilas de elementos, cada pila es ilimitada, dos personas comienzan desde la primera pila, cada vez que al menos una no tiene límite superior, y la persona que los toma todos gana la
condición de juicio ans ^ = num

cin>>n;
int ans=0;
for(int i=1;i<=n;i++){
    
    
	cin>>num;
	ans^=num;
}
if(ans) cout<<first win<<endl;
else cout<<second win<<endl;

Juego de Fib: una pila de varios elementos, dos personas se turnan para tomar los elementos, la primera mano no puede terminar el elemento por primera vez pero la segunda mano puede (no es necesario), cada vez que se toma al menos uno, y al más dos veces el elemento más reciente tomado por el oponente. Al final, es una forma extraña de sacar los elementos.
Debería ser una solución a un problema específico. La condición de juicio es que el número de elementos al principio es el número de Fibonacci, y el primer movimiento será derrotado. Solo usa una tabla para encontrar y encontrar.

Todos los días de post orz

Función SG: recuerda la fórmula de la tabla, de acuerdo con la regla de la tabla, busca el punto especial donde la función sg es 0. El principio es dividir en partes del juego similar al juego nim
. Reimpreso en la mejor clasificación blog orz

//f[N]:可改变当前状态的方式,N为方式的种类,f[N]要在getSG之前先预处理
//SG[]:0~n的SG函数值
//S[]:为x后继状态的集合
int f[N],SG[MAXN],S[MAXN];
void  getSG(int n){
    
    
    int i,j;
    memset(SG,0,sizeof(SG));
    //因为SG[0]始终等于0,所以i从1开始
    for(i = 1; i <= n; i++){
    
    
        //每一次都要将上一状态 的 后继集合 重置
        memset(S,0,sizeof(S));
        for(j = 0; f[j] <= i && j <= N; j++)
            S[SG[i-f[j]]] = 1;  //将后继状态的SG函数值进行标记
        for(j = 0;; j++) if(!S[j]){
    
       //查询当前后继状态SG值中最小的非零值
            SG[i] = j;
            break;
        }
    }
}

Supongo que te gusta

Origin blog.csdn.net/qq_45891413/article/details/108900179
Recomendado
Clasificación