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 }