Codeforces Round 212 Div 2 报告(以前没写完,现在也没心情补了,先就这样吧)

  A. Two Semiknights Meet

  题目大意:有一个8x8的棋盘,上面放有两个骑士,骑士以“田字”的方式走。每个方格都被定义为good或者bad,问骑士能否在good的格子中相遇?

  由于骑士最初位于good的格子中,并且骑士可以按原路返回,所以只需判断骑士是否能够相遇就行了(相遇后可以返回任意一个骑士的初始位置)。根据骑士的移动特性,两个骑士位置的行和列之差应该为4的倍数。

  自己开始的时候,还试图计算相遇位置,然后bfs逐个验证,想麻烦了...

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <cstring>
 4 #include <cstdlib>
 5 using namespace std;
 6 typedef pair<int, int> pii;
 7 
 8 const int N = 8;
 9 int m[N][N];
10 pii knight[2];
11 
12 bool judge()
13 {
14     int row_diff = abs(knight[0].first - knight[1].first);
15     int col_diff = abs(knight[0].second - knight[1].second);
16     if (row_diff % 4 != 0 || col_diff % 4 != 0)  return false;
17     return true;
18 }
19 
20 int main()
21 {
22 #ifdef LOCAL
23     freopen("in", "r", stdin);
24 #endif
25     int T;
26     scanf("%d", &T);
27     getchar();
28     while (T--)
29     {
30         // read data
31         char s[20];
32         int p = 0;
33         memset(m, 0, sizeof(m));
34         for (int i = 0; i < 8; ++i)
35         {
36             gets(s);
37             for (int j = 0; j < 8; ++j)
38             {
39                 if (s[j] == '#')  m[i][j] = 1;
40                 else if (s[j] == 'K')
41                 {
42                     m[i][j] = 1;
43                     knight[p++] = make_pair(i,j);
44                 }
45             }
46         }
47         if (T)  gets(s);
48 
49         if (judge())  printf("YES\n");
50         else  printf("NO\n");
51     }
52     return 0;
53 }
A

 

posted @ 2014-03-27 20:25  xiaobaibuhei  阅读(273)  评论(0编辑  收藏  举报