Vijos 1196 吃糖果游戏(博弈论)

题目链接

每一个必胜点P,肯定可以走到一个N点,N点的下一步,全是P点。递推出小数据,找规律,很明显。

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4 using namespace std;
 5 int dp[101][101];
 6 char s1[10001],s2[10001];
 7 int main()
 8 {
 9 //    int i,j,k,z,n,m;
10 //    memset(dp,-1,sizeof(dp));
11 //    for(i = 1;i <= 100;i ++)
12 //    {
13 //        dp[1][i] = 1;
14 //        dp[i][1] = 1;
15 //    }
16 //    for(i = 2;i <= 100;i ++)
17 //    {
18 //        for(j = 2;j <= i;j ++)
19 //        {
20 //            z = 0;
21 //            for(k = 1;k < i;k ++)
22 //            {
23 //                if(j > k)
24 //                {
25 //                    if(dp[j-k][k] == 0)
26 //                    z = 1;
27 //                }
28 //                if(dp[i-k][k] == 0)
29 //                z = 1;
30 //            }
31 //            if(z)
32 //            dp[i][j] = 1;
33 //            else
34 //            dp[i][j] = 0;
35 //            dp[j][i] = dp[i][j];
36 //        }
37 //    }
38 //    for(n = 1;n <= 27;n ++)
39 //    {
40 //        for(m = 1;m <= 27;m ++)
41 //        if(dp[n][m])
42 //        printf("M ");
43 //        else
44 //        printf("S ");
45 //        printf("\n");
46 //    }
47     int n,m,i,len1,len2,k;
48     for(k = 1;k <= 10;k ++)
49     {
50         scanf("%s%s",s1,s2);
51         n = m = 0;
52         len1 = strlen(s1);
53         len2 = strlen(s2);
54         for(i = 0;i < len1;i ++)
55         {
56             n = (n*10 + s1[i] - '0')%5;
57         }
58         for(i = 0;i < len2;i ++)
59         {
60             m = (m*10 + s2[i] - '0')%5;
61         }
62         if((n-1)%5 <= 2&&(n-1)%5 >= 1&&(m-1)%5 <= 2&&(m-1)%5 >= 1)
63         printf("Shadow\n");
64         else
65         printf("Matrix67\n");
66     }
67     return 0;
68 }

 

posted @ 2013-05-30 10:21  Naix_x  阅读(221)  评论(0编辑  收藏  举报