Light 1020 - A Childhood Game (博弈)

来源:互联网 发布:ip端口号怎么打开 编辑:程序博客网 时间:2024/05/16 06:07

题意

谁赢。

思路

我们可以从必败状态来推出必胜状态。

首先看Alice先手,谁最后取谁输。则dp[1] = 0。显然dp[2] = dp[3] = 1,因为2和3的先手都会让对手转移到1这个状态。

同理可得dp[4] = 0, dp[5] = dp[6] = 1。

这样应该能看出规律了吧。。Bob也是一样的,不赘述了。

代码

#include <stack>#include <cstdio>#include <list>#include <cassert>#include <set>#include <fstream>#include <iostream>#include <string>#include <sstream>#include <vector>#include <queue>#include <functional>#include <cstring>#include <algorithm>#include <cctype>//#pragma comment(linker, "/STACK:102400000,102400000")#include <string>#include <map>#include <cmath>//#include <ext/pb_ds/assoc_container.hpp>//#include <ext/pb_ds/hash_policy.hpp>using namespace std;//using namespace __gnu_pbds;#define LL long long#define ULL unsigned long long#define SZ(x) (int)x.size()#define Lowbit(x) ((x) & (-x))#define MP(a, b) make_pair(a, b)#define MS(arr, num) memset(arr, num, sizeof(arr))#define PB push_back#define X first#define Y second#define ROP freopen("input.txt", "r", stdin);#define MID(a, b) (a + ((b - a) >> 1))#define LC rt << 1, l, mid#define RC rt << 1|1, mid + 1, r#define LRT rt << 1#define RRT rt << 1|1#define FOR(i, a, b) for (int i=(a); (i) < (b); (i)++)#define FOOR(i, a, b) for (int i = (a); (i)<=(b); (i)++)#define CLOSE cin.tie(0), ios::sync_with_stdio(0)const double PI = acos(-1.0);const int INF = 0x3f3f3f3f;const double eps = 1e-4;const int MAXN = 1e2+10;const int MOD = 8e4+7;const int dir[][2] = { {-1, 0}, {1, 0}, {0, -1}, {0, 1} };const int seed = 131;int cases = 0;typedef pair<int, int> pii;int main(){    //ROP;    int T;    scanf("%d", &T);    while (T--)    {        int n;        string name;        cin >> n >> name;        printf("Case %d: ", ++cases);        if (name[0] == 'A')        {            if ((n-1)%3 == 0) puts("Bob");            else puts("Alice");        }        else        {            if (n%3 == 0) puts("Alice");            else puts("Bob");        }    }    return 0;}
0 0
原创粉丝点击