1
/*
2 TASK: wissqu
3 LANG: C++
4
5 Compiling
6 Compile: OK
7
8 Executing
9 Test 1: TEST OK [3.305 secs, 2808 KB]
10
11 All tests OK.
12 */
13 #include < stdio.h >
14 #include < string .h >
15
16 const int size = 1000 ;
17
18 char instr[ 100 ] ;
19 int data[ 6 ][ 6 ] ;
20 int flag[ 6 ][ 6 ] ;
21 int cownum[ 10 ] ;
22 int restemp[ 4 ][ 20 ] ;
23 int result[ 4 ][ 20 ] ;
24 int resnum ;
25
26 void input()
27 {
28 memset( data, 0 , sizeof (data) ) ;
29 memset( cownum, 0 , sizeof (cownum) ) ;
30
31 for ( int i = 1 ; i <= 4 ; i ++ )
32 {
33 scanf( " %s " , & instr ) ;
34 for ( int j = 0 ; j < 4 ; j ++ )
35 {
36 data[i][j + 1 ] = instr[j] - ' A ' + 1 ;
37 cownum[data[i][j + 1 ]] ++ ;
38 }
39 }
40
41 cownum[ 3 ] -- ; cownum[ 4 ] ++ ;
42 }
43
44 bool checkposi( int cowtype, int row, int col )
45 {
46 if ( row < 1 || row > 4 || col < 1 || col > 4 ) return false ;
47 if ( flag[row][col] ) return false ;
48
49 if ( cowtype == data[row][col] ) return false ;
50 if ( cowtype == data[row][col - 1 ] ) return false ;
51 if ( cowtype == data[row][col + 1 ] ) return false ;
52
53 if ( cowtype == data[row - 1 ][col] ) return false ;
54 if ( cowtype == data[row - 1 ][col - 1 ] ) return false ;
55 if ( cowtype == data[row - 1 ][col + 1 ] ) return false ;
56
57 if ( cowtype == data[row + 1 ][col] ) return false ;
58 if ( cowtype == data[row + 1 ][col - 1 ] ) return false ;
59 if ( cowtype == data[row + 1 ][col + 1 ] ) return false ;
60
61 return true ;
62 }
63
64 void frescpy()
65 {
66 for ( int i = 0 ; i <= 2 ; i ++ )
67 {
68 for ( int j = 0 ; j <= 16 ; j ++ )
69 {
70 result[i][j] = restemp[i][j] ;
71 }
72 }
73 }
74 void fresult()
75 {
76 resnum = resnum + 1 ;
77 if ( resnum == 1 ) memcpy( result, restemp, sizeof (result) ) ;
78
79 for ( int i = 0 ; i <= 2 ; i ++ )
80 {
81 for ( int j = 0 ; j <= 15 ; j ++ )
82 {
83 if ( restemp[i][j] < result[i][j] )
84 {
85 // memcpy( result, restemp, sizeof(result) ) ;
86 return ;
87 }
88 }
89 }
90 }
91 void DFS( int cowtype, int row, int col, int step )
92 {
93 // printf( "step == %d tpye = %d row=%d col=%d\n", step, cowtype, row, col ) ;
94
95 if ( row < 1 || row > 4 || col < 1 || col > 4 ) return ;
96 if ( step > 15 ) return ;
97 if ( flag[row][col] ) return ;
98 if ( cownum[cowtype] <= 0 ) return ;
99 if ( ! checkposi( cowtype, row, col ) ) return ;
100
101 int temp = data[row][col] ;
102 data[row][col] = cowtype ;
103 flag[row][col] = 1 ;
104 cownum[cowtype] -- ;
105
106 restemp[ 0 ][step] = cowtype ;
107 restemp[ 1 ][step] = row ;
108 restemp[ 2 ][step] = col ;
109
110 // if( step >=13 )
111 // printf( "step == %d tpye = %d row=%d col=%d\n", step, cowtype, row, col ) ;
112 if ( step == 15 )
113 {
114 fresult() ;
115 }
116 else
117 {
118 for ( int type = 1 ; type <= 5 ; type ++ )
119 {
120 if ( cownum[type] <= 0 ) continue ;
121 for ( int r = 1 ; r <= 4 ; r ++ )
122 {
123 for ( int c = 1 ; c <= 4 ; c ++ )
124 {
125 if ( flag[r][c] ) continue ;
126 // for( int type=1; type<=5; type++ )
127 {
128 // if( cownum[type] <= 0 ) continue ;
129 DFS( type, r, c, step + 1 ) ;
130 }
131 }
132 }
133 }
134 }
135
136 data[row][col] = temp ;
137 flag[row][col] = 0 ;
138 cownum[cowtype] ++ ;
139 }
140
141 void solve()
142 {
143 resnum = 0 ;
144 memset( flag, 0 , sizeof (flag) ) ;
145
146 for ( int i = 0 ; i <= 2 ; i ++ ) for ( int j = 0 ; j <= 16 ; j ++ ) result[i][j] = 9 ;
147
148 for ( int r = 1 ; r <= 4 ; r ++ )
149 {
150 for ( int c = 1 ; c <= 4 ; c ++ )
151 {
152 DFS( 4 , r, c, 0 ) ;
153 }
154 }
155 }
156
157 void output()
158 {
159 for ( int i = 0 ; i <= 15 ; i ++ )
160 {
161 printf( " %c %d %d\n " , result[ 0 ][i] + ' A ' - 1 , result[ 1 ][i], result[ 2 ][i] ) ;
162 }
163 printf( " %d\n " , resnum ) ;
164 }
165
166 int main()
167 {
168 freopen( " wissqu.in " , " r " , stdin ) ;
169 freopen( " wissqu.out " , " w " ,stdout ) ;
170
171 input() ;
172
173 solve() ;
174
175 output() ;
176
177 return 0 ;
178 }
179
180
2 TASK: wissqu
3 LANG: C++
4
5 Compiling
6 Compile: OK
7
8 Executing
9 Test 1: TEST OK [3.305 secs, 2808 KB]
10
11 All tests OK.
12 */
13 #include < stdio.h >
14 #include < string .h >
15
16 const int size = 1000 ;
17
18 char instr[ 100 ] ;
19 int data[ 6 ][ 6 ] ;
20 int flag[ 6 ][ 6 ] ;
21 int cownum[ 10 ] ;
22 int restemp[ 4 ][ 20 ] ;
23 int result[ 4 ][ 20 ] ;
24 int resnum ;
25
26 void input()
27 {
28 memset( data, 0 , sizeof (data) ) ;
29 memset( cownum, 0 , sizeof (cownum) ) ;
30
31 for ( int i = 1 ; i <= 4 ; i ++ )
32 {
33 scanf( " %s " , & instr ) ;
34 for ( int j = 0 ; j < 4 ; j ++ )
35 {
36 data[i][j + 1 ] = instr[j] - ' A ' + 1 ;
37 cownum[data[i][j + 1 ]] ++ ;
38 }
39 }
40
41 cownum[ 3 ] -- ; cownum[ 4 ] ++ ;
42 }
43
44 bool checkposi( int cowtype, int row, int col )
45 {
46 if ( row < 1 || row > 4 || col < 1 || col > 4 ) return false ;
47 if ( flag[row][col] ) return false ;
48
49 if ( cowtype == data[row][col] ) return false ;
50 if ( cowtype == data[row][col - 1 ] ) return false ;
51 if ( cowtype == data[row][col + 1 ] ) return false ;
52
53 if ( cowtype == data[row - 1 ][col] ) return false ;
54 if ( cowtype == data[row - 1 ][col - 1 ] ) return false ;
55 if ( cowtype == data[row - 1 ][col + 1 ] ) return false ;
56
57 if ( cowtype == data[row + 1 ][col] ) return false ;
58 if ( cowtype == data[row + 1 ][col - 1 ] ) return false ;
59 if ( cowtype == data[row + 1 ][col + 1 ] ) return false ;
60
61 return true ;
62 }
63
64 void frescpy()
65 {
66 for ( int i = 0 ; i <= 2 ; i ++ )
67 {
68 for ( int j = 0 ; j <= 16 ; j ++ )
69 {
70 result[i][j] = restemp[i][j] ;
71 }
72 }
73 }
74 void fresult()
75 {
76 resnum = resnum + 1 ;
77 if ( resnum == 1 ) memcpy( result, restemp, sizeof (result) ) ;
78
79 for ( int i = 0 ; i <= 2 ; i ++ )
80 {
81 for ( int j = 0 ; j <= 15 ; j ++ )
82 {
83 if ( restemp[i][j] < result[i][j] )
84 {
85 // memcpy( result, restemp, sizeof(result) ) ;
86 return ;
87 }
88 }
89 }
90 }
91 void DFS( int cowtype, int row, int col, int step )
92 {
93 // printf( "step == %d tpye = %d row=%d col=%d\n", step, cowtype, row, col ) ;
94
95 if ( row < 1 || row > 4 || col < 1 || col > 4 ) return ;
96 if ( step > 15 ) return ;
97 if ( flag[row][col] ) return ;
98 if ( cownum[cowtype] <= 0 ) return ;
99 if ( ! checkposi( cowtype, row, col ) ) return ;
100
101 int temp = data[row][col] ;
102 data[row][col] = cowtype ;
103 flag[row][col] = 1 ;
104 cownum[cowtype] -- ;
105
106 restemp[ 0 ][step] = cowtype ;
107 restemp[ 1 ][step] = row ;
108 restemp[ 2 ][step] = col ;
109
110 // if( step >=13 )
111 // printf( "step == %d tpye = %d row=%d col=%d\n", step, cowtype, row, col ) ;
112 if ( step == 15 )
113 {
114 fresult() ;
115 }
116 else
117 {
118 for ( int type = 1 ; type <= 5 ; type ++ )
119 {
120 if ( cownum[type] <= 0 ) continue ;
121 for ( int r = 1 ; r <= 4 ; r ++ )
122 {
123 for ( int c = 1 ; c <= 4 ; c ++ )
124 {
125 if ( flag[r][c] ) continue ;
126 // for( int type=1; type<=5; type++ )
127 {
128 // if( cownum[type] <= 0 ) continue ;
129 DFS( type, r, c, step + 1 ) ;
130 }
131 }
132 }
133 }
134 }
135
136 data[row][col] = temp ;
137 flag[row][col] = 0 ;
138 cownum[cowtype] ++ ;
139 }
140
141 void solve()
142 {
143 resnum = 0 ;
144 memset( flag, 0 , sizeof (flag) ) ;
145
146 for ( int i = 0 ; i <= 2 ; i ++ ) for ( int j = 0 ; j <= 16 ; j ++ ) result[i][j] = 9 ;
147
148 for ( int r = 1 ; r <= 4 ; r ++ )
149 {
150 for ( int c = 1 ; c <= 4 ; c ++ )
151 {
152 DFS( 4 , r, c, 0 ) ;
153 }
154 }
155 }
156
157 void output()
158 {
159 for ( int i = 0 ; i <= 15 ; i ++ )
160 {
161 printf( " %c %d %d\n " , result[ 0 ][i] + ' A ' - 1 , result[ 1 ][i], result[ 2 ][i] ) ;
162 }
163 printf( " %d\n " , resnum ) ;
164 }
165
166 int main()
167 {
168 freopen( " wissqu.in " , " r " , stdin ) ;
169 freopen( " wissqu.out " , " w " ,stdout ) ;
170
171 input() ;
172
173 solve() ;
174
175 output() ;
176
177 return 0 ;
178 }
179
180