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 }

 

你可能感兴趣的:(OS)