原题链接:

题意简述:黑方只有一个棋子,将。红方有四种棋子,现在红方已走一步,轮到黑方走了,请问黑方是否必败。

解题思路:黑方最多有四种走法,分别判断这四个位置上黑方是否会输,如果全都会输,则必败。

错误报告:这题需要注意不能用%c或者getchar()读入,因为数据似乎不标准,这样读会出错,保险的做法是将字符当作字符串读入。另外只需要考虑全面一点,就可以了,要仔细一点。

代码示例:

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;int n,rr,cc;
int gr,gc;
const int maxn = 15;
struct Node{int r,c;char type;bool flag;
}qizi[maxn];
int Map[15][15];
bool Read(){memset(Map,0,sizeof Map);scanf("%d%d%d",&n,&rr,&cc);if(n == 0 && rr == 0 && cc == 0)  return false;for(int i = 1;i <= n;i++){cin >>qizi[i].type>>qizi[i].r>>qizi[i].c;//scanf("%c%d%d",&qizi[i].type,&qizi[i].r,&qizi[i].c);qizi[i].flag = true;if(qizi[i].type == 'G') gr = qizi[i].r,gc = qizi[i].c;Map[qizi[i].r][qizi[i].c] = i;//printf("%c %d %d\n",qizi[i].type,qizi[i].r,qizi[i].c);}return true;
}
bool survival(int r,int c){// printf("%d %d\n",r,c);for(int j = 1;j <= n;j++){if(qizi[j].flag == false)   continue;char t = qizi[j].type;int xr = qizi[j].r;int xc = qizi[j].c;// printf("%c %d %d\n",t,xr,xc);if(t == 'G'){bool flag = true;for(int i = r+1;i < xr;i++)if(Map[i][c])   flag = false;if(flag && xc == c) return false;}else if(t == 'R'){bool flag = true;if(xc == c){for(int i = r+1;i < xr;i++)if(Map[i][c] != 0){flag = false;break;}for(int i = xr+1;i < r;i++)if(Map[i][c] != 0){flag = false;break;}}else if(xr == r){for(int i = c+1;i < xc;i++)if(Map[r][i] != 0){flag = false;break;}for(int i = xc+1;i < c;i++)if(Map[r][i] != 0){flag = false;break;}}else flag = false;if(flag) return false;}else if(t == 'C'){if(xc == c){int cnt = 0;for(int i = r+1;i < xr;i++)if(Map[i][c] != 0){cnt++;}for(int i = xr+1;i < r;i++)if(Map[i][c] != 0){cnt++;}if(cnt == 1) return false;}else if(xr == r){int cnt = 0;for(int i = c+1;i < xc;i++)if(Map[r][i] != 0){cnt++;}for(int i = xc+1;i < c;i++)if(Map[r][i] != 0){cnt++;}if(cnt == 1) return false;}}else if(t == 'H'){if(xr - 2 > 0){if(Map[xr-1][xc] == 0){if(xr - 2 == r && xc - 1 == c)  return false;if(xr - 2 == r && xc + 1 == c)  return false;}}if(xr + 2 < 11){if(Map[xr+1][xc] == 0){if(xr + 2 == r && xc - 1 == c)  return false;if(xr + 2 == r && xc + 1 == c)  return false;}}if(xc - 2 > 0){if(Map[xr][xc-1] == 0){if(xr + 1 == r && xc - 2 == c)  return false;if(xr - 1 == r && xc - 2 == c)  return false;}}if(xc + 2 < 10){if(Map[xr][xc+1] == 0){if(xr + 1 == r && xc + 2 == c)  return false;if(xr - 1 == r && xc + 2 == c)  return false;}}}}return true;
}
void solve(){int dr[] = {1,0,-1,0};int dc[] = {0,1,0,-1};for(int i = 0;i < 4;i++){int tr = rr+dr[i];int tc = cc+dc[i];if(tr > 0 && tr < 4 && tc > 3 && tc < 7){if(Map[tr][tc]){qizi[Map[tr][tc]].flag = false;}if(survival(tr,tc)){puts("NO");return;}if(Map[tr][tc]){qizi[Map[tr][tc]].flag = true;}}}puts("YES");return;
}
int main()
{while(Read()){solve();}return 0;
}

POJ 4001 xiangqi(模拟)相关推荐

  1. 广度优先搜索(BFS)——抓住那头牛(POJ 4001)

    本文将以(POJ 4001)抓住那头牛 为例,讲解经典算法广度优先搜索(BFS)的STL写法 在实际写算法中,怎么能不使用更快.更方便.更准确.更高效的C++ STL模板呢 相信很多人都了解过广度优先 ...

  2. POJ 1068 Parencodings 模拟递归

    http://poj.org/problem?id=1068 题意:P=每个右括号前面的左括号,W=每个右括号所在的括号包含的完整括号数,包括其本身.已知P,求W. 模拟题,将原括号按照数据呈现出来, ...

  3. HDU 4121 Xiangqi 模拟题

    题目: http://acm.hdu.edu.cn/showproblem.php?pid=4121 首先对标题赞一个,非要叫 "Xiangqi" 而不是 "中国象棋&q ...

  4. poj 1102 LC-Display(模拟)

    题目:http://poj.org/problem?id=1102 LC-Display Time Limit: 1000MS   Memory Limit: 10000K Total Submiss ...

  5. poj 3077Rounders(模拟)

    转载请注明出处:http://blog.csdn.net/u012860063? viewmode=contents 题目链接:http://poj.org/problem? id=3077 Desc ...

  6. poj 1068 Parencodings (模拟)

    题意: 先输入右括号前左括号的数量 输出每个括号所含括号的数量(从左至右) 思路: 由于以前模拟题留下太大的阴影,比较凌乱:没想到今天 模拟1Y 虽然题简单点,就是用-1  1 模拟 括号 ,向前搜索 ...

  7. UVA 1589 Xiangqi——模拟

    模拟题,我的做法是先让黑将分别上下左右移动,对每一种情况  先判断是否能被马将死(列举8种情况),然后判断是否能被 将 车 炮 将死(以黑将为中心十字展开,判断是否有 将 车 炮) 注意: 1.开局两 ...

  8. HDU 4121 Xiangqi --模拟

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

  9. POJ 4001:抓住那头牛

    题目 总时间限制: 2000ms 内存限制: 65536kB 描述 农夫知道一头牛的位置,想要抓住它.农夫和牛都位于数轴上,农夫起始位于点N(0<=N<=100000),牛位于点K(0&l ...

  10. dir命令只显示文件名

    dir /b 就是ls -f的效果 1057 -- FILE MAPPING_web_archive.7z 2007 多校模拟 - Google Search_web_archive.7z 2083 ...

最新文章

  1. SPU表管理之查询获取SPU表列表数据
  2. 人工智能如何驱动实体经济?六大领域展望
  3. 【005】◀▶ C#学习笔记(四)(集合)
  4. 云计算与虚拟化以及IaaS, PaaS和SaaS
  5. 【控制】《多智能体系统的协同群集运动控制》陈杰老师-目录
  6. SQL Server 监控统计阻塞脚本信息
  7. android mdpi对应哪一个屏幕,android 常见分辨率(mdpi、hdpi 、xhdpi、xxhdpi )及屏幕适配...
  8. 网站出现403 Forbidden
  9. mysql数据库check命令_利用mysqlcheck命令快速修复mysql数据库
  10. java演出厅选票_高仿猫眼电影选座(选票)模块-b
  11. python2.7能调用java_Python可以调用Java框架吗?
  12. android接推流sdk,Android——直播推流SDK
  13. 远离你的电脑,代码写得更好!
  14. linux 配置 MP3 RMVB 解码器
  15. 什么是归并排序 mergeSort
  16. .net学科-杨中科-Unity3D视频教程
  17. 16G DWDM SFP+光模块特性及解决方案
  18. 经典图书介绍:广义相对论--1972讲稿
  19. 【周赛总结】第196场周赛——全一子矩阵,交换k次的最小整数
  20. React路由V6技术文档

热门文章

  1. 带“小弟”其实是一种投资
  2. Java 中Calendar的使用
  3. 7-36 韩信点兵 (10分)
  4. coreldraw快速撤回_CorelDRAW基础教程,教你CDR X8撤销、重做与重复操作方法
  5. Sulfo CY5-MAL|磺基-CY5 马来酰亚胺
  6. 分布式高并发下,Actor模型如此优秀
  7. layuiAdmin自定义模块
  8. U-GAT-IT 翻译
  9. java 唐胡子_长沙.NET社区之光
  10. ubuntu系统下抓取屏幕