A Za, A Za, Fighting...

坚信:勤能补拙

PKU 1657 Distance on Chessboard

问题:
http://poj.org/problem?id=1657

思路:
原本以为是搜索题,结果发现居然都可以推导出来(*^__^*) 嘻嘻……0MS
睡觉前AC个题,感觉蛮好

代码(写的比较繁琐):
 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<string.h>
 4 #define Diff(a, b) ((a)>(b) ? ((a)-(b)) : ((b)-(a)))
 5 #define Max(a, b) ((a)>(b) ? (a) : (b))
 6 #define MAX_LEN 3
 7 typedef enum {
 8     Black,
 9     White
10 }Color;
11 
12 int
13 is_linear(char *src, char *dst)
14 {
15     if(src[0]==dst[0|| src[1]==dst[1])
16         return 1;
17     return 0;
18 }
19 
20 int 
21 is_oblique(char *src, char *dst)
22 {
23     int x_diff = Diff(src[0], dst[0]);
24     int y_diff = Diff(src[1], dst[1]);
25     if(x_diff == y_diff)
26         return 1;
27     return 0;
28 }
29 
30 Color
31 black_or_white(char *src)
32 {
33     int x = src[0- 'a' + 1;
34     int y = src[1- '0';
35     if(x%2 == y%2)
36         return White;
37     return Black;
38 }
39 
40 void
41 solve(char *src, char *dst)
42 {
43     int a, b, c, d, x_diff, y_diff;
44     x_diff = Diff(src[0], dst[0]);
45     y_diff = Diff(src[1], dst[1]);
46     a = Max(x_diff, y_diff); /* king */
47     if(is_linear(src, dst) || is_oblique(src, dst)) /* queen */
48         b = 1;
49     else 
50         b = 2;
51 
52     if(is_linear(src, dst)) /* rook */
53         c = 1;
54     else 
55         c = 2;
56 
57     if(is_oblique(src, dst)) /* bishop */
58         d = 1;
59     else if(black_or_white(src) != black_or_white(dst))
60         d = -1;
61     else
62         d = 2;
63 
64     printf("%d %d %d ", a, b, c);
65     if(d == -1)
66         printf("Inf\n");
67     else
68         printf("%d\n", d);
69 }
70 
71 int
72 main(int argc, char **argv)
73 {
74     int tests;
75     char begin[MAX_LEN], end[MAX_LEN];
76     scanf("%d"&tests);
77     while(tests--) {
78         scanf("%s %s", begin, end);
79         if(begin[0]==end[0&& begin[1]==end[1])
80             printf("0 0 0 0\n");
81         else
82             solve(begin, end);
83     }
84 }

posted on 2010-10-29 01:31 simplyzhao 阅读(165) 评论(0)  编辑 收藏 引用 所属分类: G_其他


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

<2010年10月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

统计

常用链接

留言簿(1)

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜