标签:des style blog http color io os ar java
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 3614 Accepted Submission(s): 877
这条题直接模拟 ~ 黑色将上下左右移动一次 , 看看有没被将死 。
注意一下将军可以把红旗吃了一只获得到自己的安全
代码写的比较恶心~
#include <iostream> #include <cstring> #include <algorithm> #include <cstdio> using namespace std; const int N = 15; const int M = 55 ; int dx[] = {0 , 0 , 1 , -1 }; int dy[] = {1 , -1 , 0 , 0 }; int movex[] = { 1 , -1 , 1 , -1 , 2 , 2, -2 , -2 }; int movey[] = { 2 , 2 , -2, -2 , 1 , -1, 1, -1 }; struct node { char w; int x , y ; } e[N]; int n ; int danger[N][N]; char mp[N][N]; void test() { for( int i = 1 ; i <= 10 ; ++i ){ for( int j = 1 ; j <= 9 ; ++j ){ cout << danger[i][j] << ‘ ‘; } cout << endl; } } bool inside( int x , int y ) { if( x < 1 || x > 10 || y < 1 || y > 9 ) return false; return true; } bool inside2( int x , int y ) { if( x > 3 || x < 1 || y < 4 || y > 6 )return false ; return true; } bool check( int x , int y ) { // cout << x <<‘ ‘ << y << endl; if( danger[x][y] == 3 ) return false ; else { for( int j = x - 1 ; j > 0 ; --j ){ if( mp[j][y] == ‘R‘ || mp[j][y] == ‘G‘ ) return false; if( danger[j][y] == 1 ) break ; } for( int j = x + 1 ; j < N ; ++j ){ if( mp[j][y] == ‘R‘ || mp[j][y] == ‘G‘ ) return false; if( danger[j][y] == 1 ) break ; } for( int j = y - 1 ; j > 0 ; --j ){ if( mp[x][j] == ‘R‘ || mp[x][j] == ‘G‘ ) return false; if( danger[x][j] == 1 ) break ; } for( int j = y + 1 ; j < N ; ++j ){ if( mp[x][j] == ‘R‘ || mp[x][j] == ‘G‘ ) return false; if( danger[x][j] == 1 ) break ; } // cout << "pass1" << endl; int xx , yy , tag = 0 ; for( int j = x - 1 ; j > 0 ; --j ){ if( danger[j][y] == 1 ) { tag = 1 ; xx = j ; break ; } } if( tag ){ for( int j = xx - 1 ; j > 0 ; --j ){ if( mp[j][y] == ‘C‘) return false; if( danger[j][y] == 1 ) break ; } } tag = 0 ; for( int j = x + 1 ; j < N ; ++j ){ if( danger[j][y] == 1 ) { tag = 1 ; xx = j ; break ; } } if( tag ){ for( int j = xx + 1 ; j < N ; ++j ){ if( mp[j][y] == ‘C‘) return false; if( danger[j][y] == 1 ) break ; } } // ======================================== tag = 0 ; for( int j = y - 1 ; j >= 0 ; --j ){ if( danger[x][j] == 1 ) { tag = 1 ; yy = j ; break ; } } if( tag ){ for( int j = yy - 1 ; j > 0 ; --j ){ if( mp[x][j] == ‘C‘) return false; if( danger[x][j] == 1 ) break ; } } tag = 0 ; for( int j = y + 1 ; j < N ; ++j ){ if( danger[x][j] == 1 ) { tag = 1 ; yy = j ; break ; } } if( tag ){ for( int j = yy + 1 ; j < N ; ++j ){ if( mp[x][j] == ‘C‘) return false; if( danger[x][j] == 1 ) break ; } } } // cout << "pass2" << endl; return true ; } void run() { memset ( danger , 0, sizeof danger ); memset ( mp , 0, sizeof mp ); for( int i = 1 ; i <= n ;++i ){ cin >> e[i].w >> e[i].x >> e[i].y ; mp[ e[i].x ][ e[i].y ] = e[i].w; danger[ e[i].x ][ e[i].y ] = 1 ; } for( int i = 1; i <=n ; ++i ){ if( e[i].w == ‘H‘ ){ for( int j = 0 ; j < 4 ; ++j ){ int x = e[i].x + dx[j] , y = e[i].y + dy[j] ; if( !inside(x,y) || danger[x][y] == 1 ) continue ; danger[ e[i].x + movex[ 2*j ] ][ e[i].y + movey[ 2*j ] ] = 3 ; danger[ e[i].x + movex[ 2*j + 1 ] ][ e[i].y + movey[ 2*j + 1 ] ] = 3 ; } } } // test(); for( int i = 0 ; i < 4 ; ++i ){ int x = e[0].x + dx[i] , y = e[0].y + dy[i] ; if( !inside2(x,y) ) continue ; if( check(x,y) ) { cout << "NO" << endl; return ; } } cout << "YES" << endl ; } int main() { #ifdef LOCAL freopen("in","r",stdin); #endif ios::sync_with_stdio(0); while( cin >> n >> e[0].x >> e[0].y ){ if( !n && !e[0].x && !e[0].y ) break ; run(); } return 0; }
标签:des style blog http color io os ar java
原文地址:http://www.cnblogs.com/hlmark/p/4018115.html