PKU 3561 Pseudographical recognizer
问题:
http://poj.org/problem?id=3561
思路:
简单题,结果却WA了一次
注意题目中给出的定义: in adjacent cells
就是说,这些符号必须是连续的,否则就要算两个
另一点就是符号'\'需要写成'\\',开始编译错误了呵呵
代码:
http://poj.org/problem?id=3561
思路:
简单题,结果却WA了一次
注意题目中给出的定义: in adjacent cells
就是说,这些符号必须是连续的,否则就要算两个
另一点就是符号'\'需要写成'\\',开始编译错误了呵呵
代码:
1
#include
<
stdio.h
>
2 #include < stdlib.h >
3 #include < string .h >
4 #define MAX_LEN 101
5 #define is_valid(x, y) ((x)>=0 && (x)<N && (y)>=0 && (y)<M)
6 int N, M;
7 char image[MAX_LEN][MAX_LEN];
8 int visited[MAX_LEN][MAX_LEN];
9 int hor, vert, diag;
10
11 void
12 mark( int i, int j, int dx, int dy, char ch)
13 {
14 while (is_valid(i + dx, j + dy) && image[i + dx][j + dy] == ch) {
15 visited[i + dx][j + dy] = 1 ;
16 i += dx;
17 j += dy;
18 }
19 }
20
21 void
22 solve()
23 {
24 int i, j;
25 char ch;
26 for (i = 0 ; i < N; i ++ ) {
27 for (j = 0 ; j < M; j ++ ) {
28 ch = image[i][j];
29 if (ch != ' . ' && ! visited[i][j]) {
30 visited[i][j] = 1 ;
31 switch (ch) {
32 case ' - ' :
33 ++ hor;
34 mark(i, j, 0 , - 1 , ch);
35 mark(i, j, 0 , 1 , ch);
36 break ;
37 case ' | ' :
38 ++ vert;
39 mark(i, j, - 1 , 0 , ch);
40 mark(i, j, 1 , 0 , ch);
41 break ;
42 case ' \\ ' :
43 ++ diag;
44 mark(i, j, 1 , 1 , ch);
45 mark(i, j, - 1 , - 1 , ch);
46 break ;
47 case ' / ' :
48 ++ diag;
49 mark(i, j, 1 , - 1 , ch);
50 mark(i, j, - 1 , 1 , ch);
51 break ;
52 }
53 }
54 }
55 }
56 }
57
58 int
59 main( int argc, char ** argv)
60 {
61 int i, tests;
62 scanf( " %d " , & tests);
63 while (tests -- ) {
64 scanf( " %d %d " , & N, & M);
65 for (i = 0 ; i < N; i ++ )
66 scanf( " %s " , image[i]);
67 memset(visited, 0 , sizeof (visited));
68 hor = vert = diag = 0 ;
69 solve();
70 if (hor + vert + diag == 1 )
71 printf( " CORRECT\n " );
72 else
73 printf( " INCORRECT\n " );
74 }
75 }
2 #include < stdlib.h >
3 #include < string .h >
4 #define MAX_LEN 101
5 #define is_valid(x, y) ((x)>=0 && (x)<N && (y)>=0 && (y)<M)
6 int N, M;
7 char image[MAX_LEN][MAX_LEN];
8 int visited[MAX_LEN][MAX_LEN];
9 int hor, vert, diag;
10
11 void
12 mark( int i, int j, int dx, int dy, char ch)
13 {
14 while (is_valid(i + dx, j + dy) && image[i + dx][j + dy] == ch) {
15 visited[i + dx][j + dy] = 1 ;
16 i += dx;
17 j += dy;
18 }
19 }
20
21 void
22 solve()
23 {
24 int i, j;
25 char ch;
26 for (i = 0 ; i < N; i ++ ) {
27 for (j = 0 ; j < M; j ++ ) {
28 ch = image[i][j];
29 if (ch != ' . ' && ! visited[i][j]) {
30 visited[i][j] = 1 ;
31 switch (ch) {
32 case ' - ' :
33 ++ hor;
34 mark(i, j, 0 , - 1 , ch);
35 mark(i, j, 0 , 1 , ch);
36 break ;
37 case ' | ' :
38 ++ vert;
39 mark(i, j, - 1 , 0 , ch);
40 mark(i, j, 1 , 0 , ch);
41 break ;
42 case ' \\ ' :
43 ++ diag;
44 mark(i, j, 1 , 1 , ch);
45 mark(i, j, - 1 , - 1 , ch);
46 break ;
47 case ' / ' :
48 ++ diag;
49 mark(i, j, 1 , - 1 , ch);
50 mark(i, j, - 1 , 1 , ch);
51 break ;
52 }
53 }
54 }
55 }
56 }
57
58 int
59 main( int argc, char ** argv)
60 {
61 int i, tests;
62 scanf( " %d " , & tests);
63 while (tests -- ) {
64 scanf( " %d %d " , & N, & M);
65 for (i = 0 ; i < N; i ++ )
66 scanf( " %s " , image[i]);
67 memset(visited, 0 , sizeof (visited));
68 hor = vert = diag = 0 ;
69 solve();
70 if (hor + vert + diag == 1 )
71 printf( " CORRECT\n " );
72 else
73 printf( " INCORRECT\n " );
74 }
75 }