• HDU 4121


    http://www.bnuoj.com/v3/problem_show.php?pid=10277

      1 //#pragma comment(linker, "/STACK:16777216") //for c++ Compiler
      2 #include <stdio.h>
      3 #include <iostream>
      4 #include <climits>
      5 #include <cstring>
      6 #include <cmath>
      7 #include <stack>
      8 #include <vector>
      9 #include <algorithm>
     10 #define ll long long
     11 using namespace std;
     12 
     13 const int INF = 0x3f3f3f3f;
     14 const int MAXN = 1001;
     15 const int row = 10;
     16 const int col = 9;
     17 
     18 int map[20][20];
     19 int G_x, G_y, pos_x, pos_y;
     20 bool ans;
     21 
     22 bool deal(int x, int y){
     23     return (x >= 1 && x <= row && y >= 1 && y <= col);
     24 }
     25 
     26 bool deal_plus(int x, int y){
     27     if(deal(x, y) && x <= 3 && y >= 4 && y <= 6)    return true;
     28     return false;
     29 }
     30 
     31 void init(){
     32     ans = false;
     33     memset(map, 0, sizeof(map));
     34 }
     35 
     36 bool shuai(int x, int y){
     37     int i, j;
     38     if(x - 1 < pos_x)   return false;
     39     for(i = x - 1; i >= pos_x; --i){
     40         if(map[i][y]) break;
     41     }
     42     if(map[i][y] == 5)  return true;
     43     return false;
     44 }
     45 
     46 bool ju(int x, int y){
     47     int i, j;
     48     for(i = x + 1; i <= pos_x; ++i){
     49         if(x + 1 > pos_x)   break;
     50         if(map[i][y]){
     51             if(map[i][y] == 5)  return true;
     52             else break;
     53         }
     54     }
     55     for(i = x - 1; i >= 1; --i){
     56         if(x - 1 < 1)   break;
     57         if(map[i][y]){
     58             if(map[i][y] == 5)  return true;
     59             else break;
     60         }
     61     }
     62     for(j = y - 1; j >= 1; --j){
     63         if(y - 1 < 1)   break;
     64         if(map[x][j]){
     65             if(map[x][j] == 5)  return true;
     66             else break;
     67         }
     68     }
     69     for(j = y + 1; j <= col; ++j){
     70         if(y + 1 > col) break;
     71         if(map[x][j]){
     72             if(map[x][j] == 5)  return true;
     73             else break;
     74         }
     75     }
     76     return false;
     77 }
     78 
     79 bool pao(int x, int y){
     80     bool flag = false;
     81     int i, j;
     82     for(i = x + 1; i <= pos_x; ++i){
     83         if(x + 1 > pos_x)   break;
     84         if(flag){
     85             if(map[i][y] == 5 ) return true;
     86             else break;
     87         } else if(map[i][y]){
     88             flag = true;
     89         }
     90     }
     91     flag = false;
     92     for(i = x - 1; i >= 1; --i){
     93         if(x - 1 < 1)   break;
     94         if(flag){
     95             if(map[i][y] == 5)  return true;
     96             else break;
     97         } else if(map[i][y]){
     98             flag = true;
     99         }
    100     }
    101     flag = false;
    102     for(j = y - 1; j >= 1; --j){
    103         if(y - 1 < 1)   break;
    104         if(flag){
    105             if(map[x][j] == 5)  return true;
    106             else break;
    107         } else if(map[x][j]){
    108             flag = true;
    109         }
    110     }
    111     flag = false;
    112     for(j = y + 1; j <= col; ++j){
    113         if(y + 1 > col) break;
    114         if(flag){
    115             if(map[x][j] == 5)  return true;
    116             else break;
    117         } else if(map[x][j]){
    118             flag = true;
    119         }
    120     }
    121     return false;
    122 }
    123 
    124 bool ma(int x, int y){
    125     int xx, yy;
    126 
    127     xx = x + 2; yy = y - 1;
    128     if(xx == pos_x && yy == pos_y && map[x + 1][y] == 0)    return true;
    129 
    130     xx = x + 2; yy = y + 1;
    131     if(xx == pos_x && yy == pos_y && map[x + 1][y] == 0)    return true;
    132 
    133     xx = x + 1; yy = y + 2;
    134     if(xx == pos_x && yy == pos_y && map[x][y + 1] == 0)    return true;
    135 
    136     xx = x - 1; yy = y + 2;
    137     if(xx == pos_x && yy == pos_y && map[x][y + 1] == 0)    return true;
    138 
    139     xx = x - 2; yy = y + 1;
    140     if(xx == pos_x && yy == pos_y && map[x - 1][y] == 0)    return true;
    141 
    142     xx = x - 2; yy = y - 1;
    143     if(xx == pos_x && yy == pos_y && map[x - 1][y] == 0)    return true;
    144 
    145     xx = x - 1; yy = y - 2;
    146     if(xx == pos_x && yy == pos_y && map[x][y - 1] == 0)    return true;
    147 
    148     xx = x + 1; yy = y - 2;
    149     if(xx == pos_x && yy == pos_y && map[x][y - 1] == 0)    return true;
    150 
    151     return false;
    152 }
    153 
    154 bool beat(int x, int y){
    155     int i, j;
    156     if(x + 1 > row) return false;
    157     for(i = x + 1; i <= row; ++i){
    158         if(map[i][y]) break;
    159     }
    160     if(map[i][y] == 1)  return true;
    161     return false;
    162 }
    163 
    164 bool solve(){
    165     int i, j;
    166     for(i = 1; i <= row; ++i){
    167         for(j = 1; j <= col; ++j){
    168             if(map[i][j] == 1)
    169                 if(shuai(i, j)) return true;
    170             if(map[i][j] == 2)
    171                 if(ju(i, j))    return true;
    172             if(map[i][j] == 3)
    173                 if(pao(i, j))   return true;
    174             if(map[i][j] == 4)
    175                 if(ma(i, j))    return true;
    176         }
    177     }
    178     return false;
    179 }
    180 
    181 int main(){
    182     int i, j, t;
    183     char cc;
    184     while(cin >> t >> G_x >> G_y){
    185         if(t == 0 && G_x == 0 && G_y == 0)    break;
    186         init();
    187         map[G_x][G_y] = 5;
    188         while(t--){
    189             cin >> cc >> pos_x >> pos_y;
    190             if(cc == 'G'){
    191                 map[pos_x][pos_y] = 1;
    192             } else if(cc == 'R'){
    193                 map[pos_x][pos_y] = 2;
    194             } else if(cc == 'C'){
    195                 map[pos_x][pos_y] = 3;
    196             } else if(cc == 'H'){
    197                 map[pos_x][pos_y] = 4;
    198             }
    199         }
    200         if(beat(G_x, G_y)){
    201             ans = false;
    202         }
    203         else{
    204             if(deal_plus(G_x - 1, G_y)){
    205                 map[G_x][G_y] = 0;
    206                 int temp_num = map[G_x - 1][G_y];
    207                 map[G_x - 1][G_y] = 5;
    208                 pos_x = G_x - 1;
    209                 pos_y = G_y;
    210 
    211                 if(solve()){
    212                     ans = true;
    213                 }
    214                 else{
    215                     printf("NO
    ");
    216                     continue;
    217                 }
    218                 map[G_x - 1][G_y] = temp_num;
    219                 map[G_x][G_y] = 5;
    220             }
    221             if(deal_plus(G_x + 1, G_y)){
    222                 map[G_x][G_y] = 0;
    223                 int temp_num = map[G_x + 1][G_y];
    224                 map[G_x + 1][G_y] = 5;
    225                 pos_x = G_x + 1;
    226                 pos_y = G_y;
    227 
    228                 if(solve()){
    229                     ans = true;
    230                 }
    231                 else{
    232                     printf("NO
    ");
    233                     continue;
    234                 }
    235                 map[G_x + 1][G_y] = temp_num;
    236                 map[G_x][G_y] = 5;
    237             }
    238             if(deal_plus(G_x, G_y - 1)){
    239                 map[G_x][G_y] = 0;
    240                 int temp_num = map[G_x][G_y - 1];
    241                 map[G_x][G_y - 1] = 5;
    242                 pos_x = G_x;
    243                 pos_y = G_y - 1;
    244 
    245                 if(solve()){
    246                     ans = true;
    247                 }
    248                 else{
    249                     printf("NO
    ");
    250                     continue;
    251                 }
    252                 map[G_x][G_y - 1] = temp_num;
    253                 map[G_x][G_y] = 5;
    254             }
    255             if(deal_plus(G_x, G_y + 1)){
    256                 map[G_x][G_y] = 0;
    257                 int temp_num = map[G_x][G_y + 1];
    258                 map[G_x][G_y + 1] = 5;
    259                 pos_x = G_x;
    260                 pos_y = G_y + 1;
    261 
    262                 if(solve()){
    263                     ans = true;
    264                 }
    265                 else{
    266                     printf("NO
    ");
    267                     continue;
    268                 }
    269                 map[G_x][G_y + 1] = temp_num;
    270                 map[G_x][G_y] = 5;
    271             }
    272         }
    273         if(ans){
    274             printf("YES
    ");
    275         } else{
    276             printf("NO
    ");
    277         }
    278     }
    279     return 0;
    280 }
  • 相关阅读:
    css flex布局应用
    Java 中 List、HashTable、HashMap、TreeMap
    Java 面向对象的三大特征
    Java-冒泡排序算法
    单例模式- 实现方式
    Mac
    Appium DesiredCapabilities 参数设置
    Mac- appium 环境配置
    PHP安装+使用
    mac 安装protobuf,并编译
  • 原文地址:https://www.cnblogs.com/wushuaiyi/p/3900156.html
Copyright © 2020-2023  润新知