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

 //#pragma comment(linker, "/STACK:16777216") //for c++ Compiler
#include <stdio.h>
#include <iostream>
#include <climits>
#include <cstring>
#include <cmath>
#include <stack>
#include <vector>
#include <algorithm>
#define ll long long
using namespace std; const int INF = 0x3f3f3f3f;
const int MAXN = ;
const int row = ;
const int col = ; int map[][];
int G_x, G_y, pos_x, pos_y;
bool ans; bool deal(int x, int y){
return (x >= && x <= row && y >= && y <= col);
} bool deal_plus(int x, int y){
if(deal(x, y) && x <= && y >= && y <= ) return true;
return false;
} void init(){
ans = false;
memset(map, , sizeof(map));
} bool shuai(int x, int y){
int i, j;
if(x - < pos_x) return false;
for(i = x - ; i >= pos_x; --i){
if(map[i][y]) break;
}
if(map[i][y] == ) return true;
return false;
} bool ju(int x, int y){
int i, j;
for(i = x + ; i <= pos_x; ++i){
if(x + > pos_x) break;
if(map[i][y]){
if(map[i][y] == ) return true;
else break;
}
}
for(i = x - ; i >= ; --i){
if(x - < ) break;
if(map[i][y]){
if(map[i][y] == ) return true;
else break;
}
}
for(j = y - ; j >= ; --j){
if(y - < ) break;
if(map[x][j]){
if(map[x][j] == ) return true;
else break;
}
}
for(j = y + ; j <= col; ++j){
if(y + > col) break;
if(map[x][j]){
if(map[x][j] == ) return true;
else break;
}
}
return false;
} bool pao(int x, int y){
bool flag = false;
int i, j;
for(i = x + ; i <= pos_x; ++i){
if(x + > pos_x) break;
if(flag){
if(map[i][y] == ) return true;
else break;
} else if(map[i][y]){
flag = true;
}
}
flag = false;
for(i = x - ; i >= ; --i){
if(x - < ) break;
if(flag){
if(map[i][y] == ) return true;
else break;
} else if(map[i][y]){
flag = true;
}
}
flag = false;
for(j = y - ; j >= ; --j){
if(y - < ) break;
if(flag){
if(map[x][j] == ) return true;
else break;
} else if(map[x][j]){
flag = true;
}
}
flag = false;
for(j = y + ; j <= col; ++j){
if(y + > col) break;
if(flag){
if(map[x][j] == ) return true;
else break;
} else if(map[x][j]){
flag = true;
}
}
return false;
} bool ma(int x, int y){
int xx, yy; xx = x + ; yy = y - ;
if(xx == pos_x && yy == pos_y && map[x + ][y] == ) return true; xx = x + ; yy = y + ;
if(xx == pos_x && yy == pos_y && map[x + ][y] == ) return true; xx = x + ; yy = y + ;
if(xx == pos_x && yy == pos_y && map[x][y + ] == ) return true; xx = x - ; yy = y + ;
if(xx == pos_x && yy == pos_y && map[x][y + ] == ) return true; xx = x - ; yy = y + ;
if(xx == pos_x && yy == pos_y && map[x - ][y] == ) return true; xx = x - ; yy = y - ;
if(xx == pos_x && yy == pos_y && map[x - ][y] == ) return true; xx = x - ; yy = y - ;
if(xx == pos_x && yy == pos_y && map[x][y - ] == ) return true; xx = x + ; yy = y - ;
if(xx == pos_x && yy == pos_y && map[x][y - ] == ) return true; return false;
} bool beat(int x, int y){
int i, j;
if(x + > row) return false;
for(i = x + ; i <= row; ++i){
if(map[i][y]) break;
}
if(map[i][y] == ) return true;
return false;
} bool solve(){
int i, j;
for(i = ; i <= row; ++i){
for(j = ; j <= col; ++j){
if(map[i][j] == )
if(shuai(i, j)) return true;
if(map[i][j] == )
if(ju(i, j)) return true;
if(map[i][j] == )
if(pao(i, j)) return true;
if(map[i][j] == )
if(ma(i, j)) return true;
}
}
return false;
} int main(){
int i, j, t;
char cc;
while(cin >> t >> G_x >> G_y){
if(t == && G_x == && G_y == ) break;
init();
map[G_x][G_y] = ;
while(t--){
cin >> cc >> pos_x >> pos_y;
if(cc == 'G'){
map[pos_x][pos_y] = ;
} else if(cc == 'R'){
map[pos_x][pos_y] = ;
} else if(cc == 'C'){
map[pos_x][pos_y] = ;
} else if(cc == 'H'){
map[pos_x][pos_y] = ;
}
}
if(beat(G_x, G_y)){
ans = false;
}
else{
if(deal_plus(G_x - , G_y)){
map[G_x][G_y] = ;
int temp_num = map[G_x - ][G_y];
map[G_x - ][G_y] = ;
pos_x = G_x - ;
pos_y = G_y; if(solve()){
ans = true;
}
else{
printf("NO\n");
continue;
}
map[G_x - ][G_y] = temp_num;
map[G_x][G_y] = ;
}
if(deal_plus(G_x + , G_y)){
map[G_x][G_y] = ;
int temp_num = map[G_x + ][G_y];
map[G_x + ][G_y] = ;
pos_x = G_x + ;
pos_y = G_y; if(solve()){
ans = true;
}
else{
printf("NO\n");
continue;
}
map[G_x + ][G_y] = temp_num;
map[G_x][G_y] = ;
}
if(deal_plus(G_x, G_y - )){
map[G_x][G_y] = ;
int temp_num = map[G_x][G_y - ];
map[G_x][G_y - ] = ;
pos_x = G_x;
pos_y = G_y - ; if(solve()){
ans = true;
}
else{
printf("NO\n");
continue;
}
map[G_x][G_y - ] = temp_num;
map[G_x][G_y] = ;
}
if(deal_plus(G_x, G_y + )){
map[G_x][G_y] = ;
int temp_num = map[G_x][G_y + ];
map[G_x][G_y + ] = ;
pos_x = G_x;
pos_y = G_y + ; if(solve()){
ans = true;
}
else{
printf("NO\n");
continue;
}
map[G_x][G_y + ] = temp_num;
map[G_x][G_y] = ;
}
}
if(ans){
printf("YES\n");
} else{
printf("NO\n");
}
}
return ;
}

HDU 4121的更多相关文章

  1. HDU 4121 Xiangqi 模拟题

    Xiangqi Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4121 ...

  2. HDU 4121 Xiangqi (算是模拟吧)

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4121 题意:中国象棋对决,黑棋只有一个将,红棋有一个帅和不定个车 马 炮冰给定位置,这时当黑棋走,问你黑 ...

  3. HDU 4121 Xiangqi --模拟

    题意: 给一个象棋局势,问黑棋是否死棋了,黑棋只有一个将,红棋可能有2~7个棋,分别可能是车,马,炮以及帅. 解法: 开始写法是对每个棋子,都处理处他能吃的地方,赋为-1,然后判断将能不能走到非-1的 ...

  4. HDU 4121 Xiangqi 我老了?

    Xiangqi Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  5. HDU 4121 Xiangqi

    模拟吧,算是... 被这个题wa到哭,真是什么都不想说了...上代码 #include <iostream> #include <cstring> using namespac ...

  6. HDOJ 2111. Saving HDU 贪心 结构体排序

    Saving HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  7. 【HDU 3037】Saving Beans Lucas定理模板

    http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...

  8. hdu 4859 海岸线 Bestcoder Round 1

    http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...

  9. HDU 4569 Special equations(取模)

    Special equations Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S ...

随机推荐

  1. .NET Core 安装

    Visual Studio 2015 和 .NET Core 安装 安装 Visual Studio 和 .NET Core 1.安装 Visual Studio Community 2015,选择 ...

  2. Access2007中如何运行SQL执行SQl语句

    1. 在“创建”选项卡中,单击“其他”组中的“查询设计”. 2. 单击“显示表”对话框中的“关闭”,而不添加任何表或查询. 3. 在“设计”选项卡中,单击“查询类型”工作组中的“联合”. 4. 单击“ ...

  3. JS声明语句提升与作用域

    <!DOCTYPE html><html><head></head><body><script>//-------------- ...

  4. github 的分支操作

    首先需要当前目录设置为仓库目录 一.创建本地分支 1.查看有哪些分支:git branch 2.创建一个分支:git branch name  ,其中name是分支名 3.切换到分支:git chec ...

  5. perl unicode utf-8 \x转换

    [root@dr-mysql01 ~]# cat x5.pl use Encode; use JSON; use URI::Escape; use LWP::Simple; my $host = &q ...

  6. poj 2503 Babelfish(Map、Hash、字典树)

    题目链接:http://poj.org/bbs?problem_id=2503 思路分析: 题目数据数据量为10^5, 为查找问题,使用Hash或Map等查找树可以解决,也可以使用字典树查找. 代码( ...

  7. Flex 百度地图API使用

    今天想看一下Flex中关于地图方面的使用,刚开始看了google map api, 感觉用起来挺麻烦,关键是英文不好,文档读起来费劲,还有密钥神马的~ 那我就试验一下百度地图的接口,文档是中文的. 首 ...

  8. GDB学习之道:GDB调试精粹及使用实例

    一:列文件清单  1. List  (gdb) list line1,line2 二:执行程序  要想运行准备调试的程序,可使用run命令,在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出 ...

  9. Linux虚拟机与外面系统ping不通,或者连不上网

    很多其它具体文档:http://download.csdn.net/download/zml_2015/8843061 非常多人在做linux课程设计的时候,用的linux虚拟机与外面的系统ping不 ...

  10. Android中的一些基础知识(一)

    翻译自这里,并做了部分修改. 什么是Android? Android是为移动设备提供的软件,它包括操作系统.中间件.和一些关键的应用程序.应用程序执行它自己的进程和在Dalvik虚拟机中的实例. An ...