博弈:
题目链接:博弈打表入门题
思路:先打表找规律。
///打表找规律代码:
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
char dp[1005][1005];
int main()
{
int n, m, k;
scanf("%d%d%d", &n, &m, &k);
dp[n][m] = '#';
for(int i = n; i >= 1; --i)
{
for(int j = m; j >= 1; --j)
{
if(i == n && j == m)
{
dp[n][m] = '#';
}
else if(i + 1 <= n && dp[i + 1][j] == '#' || j + 1 <= m && dp[i][j + 1] == '#' || i + k <= n && j + k <= m && dp[i + k][j + k] == '#')
{
dp[i][j] = '*';
}
else
dp[i][j] = '#';
}
}
for(int i = 1; i <= n; ++i)
{
for(int j = 1; j <= m; ++j)
{
printf("%c ", dp[i][j]);
}
printf("\n");
}
}
找到规律之后再构思并写出题解:
#include<bits/stdc++.h>
#include<cstdio>
#define ll long long
using namespace std;
int main()
{
int t; scanf("%d",&t);
while(t--)
{
int n,m,q,k,tt1,tt2,cha,tt,ttt;
scanf("%d%d",&q,&k);
while(q--)
{
///tt1是小的,tt2是大的
scanf("%d%d",&n,&m);
if(n>=m) { tt1=m; tt2=n; }
else { tt1=n; tt2=m; }
cha=tt2-tt1; tt=2*k+2;
if(k==1)
{
if(cha%2==0)
{
if(tt1%2==0) printf("Alice\n");
else printf("Bob\n");
}
else printf("Alice\n");
continue;
}
if(cha%2==0)
{
ttt=tt1%tt;
if(ttt<=k) printf("Bob\n");
else printf("Alice\n");
}
else
{
if(tt1<=k+1) printf("Alice\n");
else {
tt1-=(k+1);
ttt=tt1%tt;
if(ttt<=k) printf("Bob\n");
else printf("Alice\n");
}
}
}
}
return 0;
}