HDU 4121
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的更多相关文章
- HDU 4121 Xiangqi 模拟题
Xiangqi Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4121 ...
- HDU 4121 Xiangqi (算是模拟吧)
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4121 题意:中国象棋对决,黑棋只有一个将,红棋有一个帅和不定个车 马 炮冰给定位置,这时当黑棋走,问你黑 ...
- HDU 4121 Xiangqi --模拟
题意: 给一个象棋局势,问黑棋是否死棋了,黑棋只有一个将,红棋可能有2~7个棋,分别可能是车,马,炮以及帅. 解法: 开始写法是对每个棋子,都处理处他能吃的地方,赋为-1,然后判断将能不能走到非-1的 ...
- HDU 4121 Xiangqi 我老了?
Xiangqi Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- HDU 4121 Xiangqi
模拟吧,算是... 被这个题wa到哭,真是什么都不想说了...上代码 #include <iostream> #include <cstring> using namespac ...
- HDOJ 2111. Saving HDU 贪心 结构体排序
Saving HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 【HDU 3037】Saving Beans Lucas定理模板
http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...
- hdu 4859 海岸线 Bestcoder Round 1
http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...
- HDU 4569 Special equations(取模)
Special equations Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
随机推荐
- 基于FPGA的key button等开关消抖,按键消抖电路设计
最近要用上一个key消抖的功能.于是找到了之前写的并放入博客的程序,发现居然全部有问题.http://www.cnblogs.com/sepeng/p/3477215.html —— 有问题,包括很多 ...
- IIs 网站应用程序与虚拟目录的区别及高级应用说明(文件分布式存储方案)
原文 IIs 网站应用程序与虚拟目录的区别及高级应用说明(文件分布式存储方案) 对于IIS网站,大伙用的比较多,就不啰嗦了. 今天和说说大伙比较少使用的"IIS应用程序”和虚拟目录的区别 ...
- 宣布发布 Windows Azure 导入/导出服务的预览版以及 Web 和移动解决方案场景的若干增强功能
客户评估基于云的存储解决方案时,面临的挑战之一是以经济高效.安全快速的方式从 Blob 存储区移进和移出大量数据.今天,我们很高兴地宣布发布 Windows Azure 导入/导出的预览版,这款新服务 ...
- Ghost.py 0.1b3 : Python Package Index
Ghost.py 0.1b3 : Python Package Index Ghost.py 0.1b3 Download Ghost.py-0.1b3.tar.gz Webkit based web ...
- SVN 让项目某些文件不受版本控制
@echo On @Rem 删除SVN版本控制目录 @PROMPT [Com] @for /r . %%a in (.) do @if exist "%%a\.svn" rd /s ...
- 禁用Visual Studio 2013的Browser Link功能
禁用Visual Studio 2013的Browser Link功能 GET http://localhost:37478/7fd25f8af33f443494e765be19be6240/brow ...
- HttpWebRequest和WebClient的区别
HttpWebRequest和WebClient的区别(From Linzheng): 1,HttpWebRequest是个抽象类,所以无法new的,需要调用HttpWebRequest.Creat ...
- js中使用this的一些注意事项
先看看这段代码 var x =9; var fobj ={ x:1, test:function(callback){ var x= 2; callback(); } } function pp(){ ...
- Querying Microsoft SQL Server 2012 读书笔记:查询和管理XML数据 1 -使用FOR XML返回XML结果集
XML 介绍 <CustomersOrders> <Customer custid="1" companyname="Customer NRZBB&qu ...
- 关于MooTools你应该熟知的6个基本知识
MooTools是一个精简.模组化同时也面向对象的JavaScript框架,它设计给中等和进阶的JavaScript开发人员使用.使用 MooTools优美.详细而条理分明的API,可让你写出强大.富 ...