题目:

象棋,黑棋只有将,红棋有帅车马炮。问是否死将。

思路:

对方将四个方向走一步,看看会不会被吃。

代码:

很难看……WA了很多发,还越界等等。

#include <cstdio>
#include <cstring>
#include <cstdlib> char graph[][];
int go[][] = {{,},{,},{-,},{,-}}; bool inBlackPalace(int x, int y) {
return <= y && y <= && <= x && x <= ;
} bool inChess(int x, int y) {
return <= x && x <= && <= y && y <= ;
} bool goG(int x, int y) {
for (int i = x-; i >= ; i--) {
if (graph[i][y]) {
return graph[i][y] == 'B';
}
}
return false;
} bool goR(int x, int y) {
for (int i = x-; i >= ; i--) {
if (graph[i][y]) {
if (graph[i][y] == 'B') return true;
break;
}
}
for (int i = x+; i <= ; i++) {
if (graph[i][y]) {
if (graph[i][y] == 'B') return true;
break;
}
}
for (int j = y-; j >= ; j--) {
if (graph[x][j]) {
if (graph[x][j] == 'B') return true;
break;
}
}
for (int j = y+; j <= ; j++) {
if (graph[x][j]) {
if (graph[x][j] == 'B') return true;
break;
}
}
return false;
} int can_move(int x,int y,int w)
{
if(w==) if(x<||x>||y<||y>) return ;
if(w==) if(x<||x>||y<||y>) return ;
return ;
} bool goH(int x, int y) {
for (int i = ; i < ; i++) {
int nx = x + go[i][];
int ny = y + go[i][];
if ( <= nx && nx <= && <= ny && ny <= ) {
if (graph[nx][ny] == ) {
if (inChess(nx+go[i][]+go[i][],ny+go[i][]+go[i][]))
if (graph[nx+go[i][]+go[i][]][ny+go[i][]+go[i][]] == 'B') return true; if (inChess(nx+go[i][]-go[i][],ny+go[i][]-go[i][]))
if (graph[nx+go[i][]-go[i][]][ny+go[i][]-go[i][]] == 'B') return true;
}
}
}
return false;
} bool goC(int x, int y) {
bool first = true;
for (int i = x-; i >= ; i--) {
if (graph[i][y]) {
if (first) {
first = false;
} else {
if (graph[i][y] == 'B') return true;
break;
}
}
}
first = true;
for (int i = x+; i <= ; i++) {
if (graph[i][y]) {
if (first) {
first = false;
} else {
if (graph[i][y] == 'B') return true;
break;
}
}
} first = true;
for (int j = y-; j >= ; j--) {
if (graph[x][j]) {
if (first) {
first = false;
} else {
if (graph[x][j] == 'B') return true;
break;
}
}
}
first = true;
for (int j = y+; j <= ; j++) {
if (graph[x][j]) {
if (first) {
first = false;
} else {
if (graph[x][j] == 'B') return true;
break;
}
}
}
return false;
} bool goo(int x, int y) {
switch(graph[x][y]) {
case 'G': return goG(x,y);
case 'R': return goR(x,y);
case 'H': return goH(x,y);
case 'C': return goC(x,y);
} return false;
} char ch[];
int main() {
int n;
while (scanf("%d", &n) != EOF) {
int bx, by;
scanf("%d%d", &bx, &by);
if (n == && bx == && by == ) break; memset(graph, , sizeof(graph)); for (int i = ; i < n; i++) {
int x, y;
scanf("%s%d%d", ch, &x, &y);
graph[x][y] = ch[];
} bool flag = false;
for (int way = ; way < ; way++) {
int nx = bx + go[way][];
int ny = by + go[way][];
if (!inBlackPalace(nx, ny)) continue;
char tmp = graph[nx][ny];
graph[nx][ny] = 'B';
bool ok = true;
for (int i = ; i <= && ok; i++) {
for (int j = ; j <= && ok; j++) {
if (graph[i][j]) {
if (goo(i,j)) ok = false;
}
}
} graph[nx][ny] = tmp;
if (ok) {
flag = true;
break;
}
} puts(flag?"NO":"YES");
}
return ;
}

UVA 1589:Xiangqi (模拟 Grade D)的更多相关文章

  1. ●UVa 1589 Xiangqi(模拟)

    ●赘述题意 给出一个中国象棋残局,告诉各个棋子的位置,黑方只有1枚“将”,红方有至少2枚,至多7枚棋子,包含1枚“帅G”,和若干枚“车R”,“马H”,“炮C”.当前为黑方的回合,问黑方的“将”能否在移 ...

  2. 【每日一题】 UVA - 1589 Xiangqi 函数+模拟 wa了两天

    题意:背景就是象棋, 题解:坑点1(wa的第一天):将军可以吃掉相邻的棋子,(然行列也写反了orz) 坑点2(wa的第二天):将军到马要反过来写,边界有误,并且第一次碰到的车才算(写到后来都忘了) # ...

  3. Uva - 1589 - Xiangqi

    Xiangqi is one of the most popular two-player board games in China. The game represents a battle bet ...

  4. 【UVA】1589 Xiangqi(挖坑待填)

    题目 题目     分析 无力了,noip考完心力憔悴,想随便切道题却码了250line,而且还是错的,知道自己哪里错了,但特殊情况判起来太烦了,唯一选择是重构,我却没有这勇气. 有空再写吧,最近真的 ...

  5. UVA 1594:Ducci Sequence (模拟 Grade E)

    题意: 对于一个n元组(a0,a1,...),一次变换后变成(|a0-a1|,|a1-a2|,...) 问1000次变换以内是否存在循环. 思路: 模拟,map判重 代码: #include < ...

  6. UVA 1593: Alignment of Code(模拟 Grade D)

    题意: 格式化代码.每个单词对齐,至少隔开一个空格. 思路: 模拟.求出每个单词最大长度,然后按行输出. 代码: #include <cstdio> #include <cstdli ...

  7. uva 177:Paper Folding(模拟 Grade D)

    题目链接 题意:一张纸,每次从右往左对折.折好以后打开,让每个折痕都自然的呈90度.输出形状. 思路:模拟折……每次折想象成把一张纸分成了正面在下的一张和反面在上的一张.维护左边和方向,然后输出.细节 ...

  8. HDU 4121 Xiangqi 模拟题

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

  9. UVA 246 - 10-20-30 (模拟+STL)

    UVA 246 - 10-20-30 题目链接 题意:给52张的扑克堆,先从左往右发7张牌,之后连续不断从左往右发7张牌,假设有牌堆形成了下面3种情况(按顺序推断): 1.头两张+尾一张和为10或20 ...

随机推荐

  1. Android面试收集录7 AsyncTask详解

    1.Android中的线程 在操作系统中,线程是操作系统调度的最小单元,同时线程又是一种受限的系统资源,即线程不可能无限制地产生, 并且 **线程的创建和销毁都会有相应的开销.**当系统中存在大量的线 ...

  2. SparkSteaming中直连与receiver两种方式的区别

    SparkStreaming的Receiver方式和直连方式有什么区别? Receiver接收固定时间间隔的数据(放在内存中的),使用高级API,自动维护偏移量,达到固定的时间才去进行处理,效率低并且 ...

  3. CSS3 loading效果全

    梦想天空 关注前端开发技术 ◆ 推动 HTML5 & CSS3 技术发展 ◆ 本博客全新站点:yyyweb.com 欢迎围观:) 首页 管理 订阅 网页设计 JavaScript jQuery ...

  4. Java继承的缺点

    转载自:https://www.cnblogs.com/xz816111/archive/2018/05/24/9080173.html JAVA中使用到继承就会有两个无法回避的缺点: 1.打破了封装 ...

  5. CV限制符--C++

    C/C++提供多种声明变量和函数存储持续性.作用域和链接性的关键字,有些被称为存储说明符(store class specifier)或 cv 限定符(cv-qualifier),这里就一起学习一下c ...

  6. 更改maven本地仓库地址

    1.进入maven安装conf文件中,编辑settings.xml文件,新增图中的圈出的内容(我想要存放的地址是D:\HMY\m2\repository) 2.复制settings.xml文件至D:\ ...

  7. Linux系统源码安装cloud-init

    参考:https://cloud.tencent.com/document/product/213/12587使用以下命令下载 cloud-init 源码包 官网下载地址:https://launch ...

  8. 历届试题 带分数 全排列模板 JAVA

    标题:带分数 100 可以表示为带分数的形式:100 = 3 + 69258 / 714 还可以表示为:100 = 82 + 3546 / 197 注意特征:带分数中,数字1~9分别出现且只出现一次( ...

  9. 第二阶段团队冲刺-three

    昨天: 修复博客作业查询功能. 今天: 绘制logo. 遇到的问题: 无.

  10. json字符串数组判断其中

    嘴挺笨的描述不清,直接看图,console.log(data1)是下图 获取的table中的数据组成的json对象(这里我不明白json对象啊json字符串啊json数组啊.我只会- 需要啥就转换成啥 ...