/
e1.c
37 lines (31 loc) · 793 Bytes
/
e1.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define max( a, b ) ( (a) > (b) ? (a) : (b) )
int R[ 1002 ][ 1002 ];
int main( int argc, char **argv ){
int TC, N, i, j, k;
char B[ 1002 ][ 1002 ];
scanf( "%d", &TC );
while( TC-- ){
scanf( "%d\n", &N );
for( i = 0; i ^ N; i++ )
gets( B[ i ] );
for( j = N; j--; ){
for( i = 0; i ^ N; i++ ){
k = 0;
if( ( j + 1 ) < N && ( i - 2 ) >= 0 ) k = max( k, R[ i - 2 ][ j + 1 ] );
if( ( j + 2 ) < N && ( i - 1 ) >= 0 ) k = max( k, R[ i - 1 ][ j + 2 ] );
if( ( j + 2 ) < N && ( i + 1 ) < N ) k = max( k, R[ i + 1 ][ j + 2 ] );
if( ( j + 1 ) < N && ( i + 2 ) < N ) k = max( k, R[ i + 2 ][ j + 1 ] );
if( B[ i ][ j ] == 'K' ){
printf( "%d\n", k );
break;
}
R[ i ][ j ] = k + ( B[ i ][ j ] == 'P' );
}
if( i < N ) break;
}
}
return 0;
}