题目:

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

思路:

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

代码:

很难看……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. 20145202马超 《Java程序设计》第三周学习总结

    ************************http://git.oschina.net/tuolemi/java这是git的那个网址********************* 函数的重载:在同一 ...

  2. CC3200串口UART1配置

    1. 首先打开工程\CC3200SDK_1.1.0\example\adc\ewarm,以ADC例程为例,修改串口引脚复用,先看下引脚图 2. 修改引脚复用代码 void PinMuxConfig(v ...

  3. 《Cracking the Coding Interview》——第6章:智力题——题目2

    2014-03-19 06:57 题目:对于8x8的棋盘,如果拿掉对角位置的两个小块儿,能否用1x2的多米诺牌拼成剩下的棋盘? 解法:不可能.且不说8x8,NxN都是不可能的.如果N是奇数,NxN-2 ...

  4. 《Cracking the Coding Interview》——第4章:树和图——题目6

    2014-03-19 04:16 题目:找出一棵二叉搜索树中的中序遍历后继节点,每个节点都有指针指向其父节点. 解法1:分两种情况:向下走时,先右后左:向上走时,先左后右.如果目标节点有右子树,就向右 ...

  5. USACO Section1.1 Broken Necklace 解题报告

    beads解题报告 —— icedream61 博客园(转载请注明出处)---------------------------------------------------------------- ...

  6. Percona-Tookit工具包之pt-summary

      Preface       As a dba,We are obliged to master several basic tools(such as vmstat,top,netstat,ios ...

  7. Python全栈工程师(集合、函数)

     ParisGabriel     感谢 大家的支持  你们的阅读评价就是我最好的动力  我会坚持把排版内容以及偶尔的错误做的越来越好        每天坚持 一天一篇 点个订阅吧  灰常感谢    ...

  8. js文字效果

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  9. zoj 1508 Intervals (差分约束)

    Intervals Time Limit: 10 Seconds      Memory Limit: 32768 KB You are given n closed, integer interva ...

  10. Hacking Tools

    Hacking Tools 种各样的黑客工具浩如天上繁星,这也让许多刚刚入门安全技术圈的童鞋感到眼花缭乱,本文整理了常用的安全技术工具,希望能够给你带来帮助.以下大部分工具可以在 GitHub 或 S ...