题意:背景就是象棋,

题解:坑点1(wa的第一天):将军可以吃掉相邻的棋子,(然行列也写反了orz)

  坑点2(wa的第二天):将军到马要反过来写,边界有误,并且第一次碰到的车才算(写到后来都忘了)

#define _CRT_SECURE_NO_WARNINGS
#include<cmath>
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<cstring>
using namespace std;
#define rep(i,t,n) for(int i =(t);i<=(n);++i)
#define per(i,n,t) for(int i =(n);i>=(t);--i)
#define mmm(a,b) memset(a,b,sizeof(a)) const int maxn = 1e3 + ;
int a[maxn];
typedef long long ll;
int dr = ;
int n, sr, sc; double z;
char mmp[][]; int dir[][] = { , ,,, ,-, -, };
bool check(int r, int c) {
if (r < || r> || c < || c>)return ;
int nothas = ;
if (mmp[r][c])nothas == ;
//up
int nr = r, nc = c; int one = ,first = ;
while (nr--&&nr>=) {
if (first&&mmp[nr][nc] == 'R')return ; if (one&&mmp[nr][nc] == 'C')return ; if (mmp[nr][nc] != )if (first == )one = ,first=; else one = ; }
//down
nr = r, nc = c; one = ; first = ;
while (nr++&&nr <= ) {
if (first&&(mmp[nr][nc] == 'R' || mmp[nr][nc] == 'G'))return ; if (one&&mmp[nr][nc] == 'C')return ; if (mmp[nr][nc] != )if (first == )one = , first = ; else one = ;
}
//left
nr = r, nc = c; one = ; first = ;
while (nc++&&nc <= ) {
if (first&&mmp[nr][nc] == 'R')return ; if (one&&mmp[nr][nc] == 'C')return ; if (mmp[nr][nc] != )if (first == )one = , first = ; else one = ;
}
//right
nr = r, nc = c; one = ; first = ;
while (nc--&&nc >= ) {
if (first&&mmp[nr][nc] == 'R')return ; if (one&&mmp[nr][nc] == 'C')return ; if (mmp[nr][nc] != )if (first == )one = , first = ; else one = ; }
//horse
nr = r, nc = c;
if (mmp[nr + ][nc+] == ) {if (mmp[nr + ][nc + ] == 'H' || mmp[nr + ][nc + ] == 'H')return ;}
if (mmp[nr + ][nc - ] == ) { if (mmp[nr + ][nc - ] == 'H' || mmp[nr + ][nc - ] == 'H')return ; }
if (nr>=&&mmp[nr-][nc+] == ) { if (mmp[nr-][nc + ] == 'H' || (nr>=&&mmp[nr-][nc + ] == 'H'))return ; }
if (nr >= && mmp[nr - ][nc - ] == ) { if (mmp[nr - ][nc - ] == 'H' || (nr >= && mmp[nr - ][nc - ] == 'H'))return ; } return ;
}
int main() { while (cin >> n >> sr >> sc && (n || sr || sc)) {
mmm(mmp, ); rep(i, , n) {
char c;
cin >> c;
int x, y;
cin >> x >> y;
mmp[x][y] = c; }
int cnt = ;
rep(i, , ) {
if (check(sr + dir[i][], sc + dir[i][])) cnt++;
}
if (cnt == )puts("YES");
else puts("NO");
} }
/*
2 3 5
H 2 5
C 1 5 3 1 5
H 4 5
G 10 5
C 7 5 2 1 5
R 4 4
G 10 5 3 1 5
G 10 4
R 5 5
H 3 7 4 1 5
G 10 4
C 6 5
H 5 5
R 1 1 5 1 5
G 10 4
C 6 5
H 5 5
H 4 5
R 1 1 3 1 5
G 10 4
C 2 7
H 3 7 3 1 5
G 10 4
R 5 5
R 1 6 4 1 5
G 10 4
R 5 5
R 1 6
H 3 7 0 0 0 */

第一天的wa

#include<iostream>
#include<string>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<stdio.h>
#include<algorithm>
#include<set>
#include<bitset>
#include<queue>
using namespace std; #define rep(i,j,k) for(int i = (int)j;i <= (int)k;i ++)
#define per(i,j,k) for(int i = (int)j;i >= (int)k;i --)
#define debug(x) cerr<<#x<<" = "<<(x)<<endl
#define mmm(a,b) memset(a,b,sizeof(a))
#define pb push_back
#define eps 1e-7 typedef long long ll;
const int maxn = 1e6 + ;
//const ll mod = 1e9 + 7;
int mmp[][];
int n = ;
int dir[][] = { , ,,, ,-, -, };
struct node {
int x, y, t;
node(int x = , int y = , int t = ) :x(x), y(y), t(t) {}
void sc() { scanf("%d%d", &x, &y); }
}; int vis[][];
string op[];
int r[], c[];
int main()
{
int sr, sc;
begin:
while (cin >> n>>sr>>sc&&(n||sr||sc)) { mmm(mmp, );
mmm(vis, );
rep(i, , n) {
//string op; int r, c;
cin >> op[i] >> r[i] >> c[i];
vis[r[i]][c[i]] = ;
}
rep(k, , n) {
if (op[k] == "R") {
int i = r[k];
int ok = ;
while (i--) {
if (vis[i][c[k]] )ok = ;
if (ok)mmp[i][c[k]] = ;
}
i = r[k];
ok = ;
while (i++&i<=) {
if (vis[i][c[k]] )ok = ;
if (ok)mmp[i][c[k]] = ;
}
int j = c[k];
ok = ;
while (j--) {
if (vis[r[k]][j] && ok == )ok = ;
if (ok)mmp[r[k]][j] = ;
}
j = c[k];
ok = ;
while (j++&&j<=) {
if (vis[r[k]][j] && ok == )ok = ;
if (ok)mmp[r[k]][j] = ;
}
//rep(i, 1, 10)mmp[i][c[k]] = 1;
//rep(j, 1, 9)mmp[r[k]][j] = 1;
}
if (op[k] == "G") {
per(i, , ) { if (vis[i][c[k]])break; if (i == sr && sc == c[k]) { puts("NO"); goto begin; } mmp[i][c[k]] = ; } }
if (op[k] == "C") {
int i = r[k];
int ok = ;
while (i--) {
if (vis[i][c[k]]) if( ok == )ok = ;
else ok = ; if (ok)mmp[i][c[k]] = ;
}
i = r[k];
ok = ;
while (i++&&i<=) {
if (vis[i][c[k]]) if (ok == )ok = ;
else ok = ; if (ok)mmp[i][c[k]] = ;
}
int j = c[k];
ok = ;
while (j--) {
if (vis[r[k]][j])if(ok == )ok = ;
else ok = ; if (ok)mmp[r[k]][j] = ;
}
while (j++) {
if (vis[r[k]][j]) if( ok == )ok = ;
else ok = ; if (ok)mmp[r[k]][j] = ;
}
}
if (op[k] == "H") {
if (c[k] + <= )if (!vis[r[k]][c[k] + ])mmp[r[k] + ][c[k] + ] = mmp[r[k] - ][c[k] + ] = ;
if (c[k] - <= )if (!vis[r[k]][c[k] - ])mmp[r[k] + ][c[k] - ] = mmp[r[k] - ][c[k] - ] = ;
if (r[k] - <= )if (!vis[r[k]-][c[k]])mmp[r[k] - ][c[k] - ] = mmp[r[k] - ][c[k] +] = ;
if (r[k] + <= )if (!vis[r[k] + ][c[k]])mmp[r[k] + ][c[k] - ] = mmp[r[k] + ][c[k] + ] = ;
}
}
int ok=;
rep(i, , ) {
int dr = sr + dir[i][];
int dc = sc + dir[i][];
if (dr > || dr < || dc> || dc < )continue;
if (mmp[dr][dc] == )ok = ;
}
rep(i, , ) {rep(j, , )cout << mmp[i][j] << ' ';cout << endl;}
if (ok)puts("NO");
else puts("YES");
} }
/* 2 2 5
H 2 3
R 2 4 */

【每日一题】 UVA - 1589 Xiangqi 函数+模拟 wa了两天的更多相关文章

  1. ●UVa 1589 Xiangqi(模拟)

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

  2. UVA 1589:Xiangqi (模拟 Grade D)

    题目: 象棋,黑棋只有将,红棋有帅车马炮.问是否死将. 思路: 对方将四个方向走一步,看看会不会被吃. 代码: 很难看……WA了很多发,还越界等等. #include <cstdio> # ...

  3. Uva - 1589 - Xiangqi

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

  4. [LeetCode每日一题]1143. 最长公共子序列

    [LeetCode每日一题]1143. 最长公共子序列 问题 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度.如果不存在 公共子序列 ,返回 0 . 一个字符串 ...

  5. PL/SQL Challenge 每日一题:2014-3-14 11gR2中带RELIES_ON子句的RESULT_CACHE函数

    PL/SQL Challenge 每日一题:2014-3-14 11gR2中带RELIES_ON子句的RESULT_CACHE函数 最先答对且答案未经编辑的puber将获得纪念章一枚(答案不可编辑但可 ...

  6. 【python】Leetcode每日一题-笨阶乘

    [python]Leetcode每日一题-笨阶乘 [题目描述] 通常,正整数 n 的阶乘是所有小于或等于 n 的正整数的乘积.例如,factorial(10) = 10 * 9 * 8 * 7 * 6 ...

  7. 老男孩IT教育-每日一题汇总

    老男孩IT教育-每日一题汇总 第几天 第几周 日期 快速访问链接 第123天 第二十五周 2017年8月25日 出现Swap file….already exists以下错误如何解决? 第122天 2 ...

  8. CISP/CISA 每日一题 四

    CISA 每日一题(答) 连续在线审计技术: 1.系统控制审计检查文件和内嵌审计模型(SCARF/EAM):非常复杂,适用于正常处理不能被中断:通过在组织的主机应用系统中内嵌经特别编写的审计软件,使审 ...

  9. CISP/CISA 每日一题 三

    CISA 每日一题(答) 测试应用控制的有效性包括: 分析计算机应用程序.测试计算机应用程序控制.选择和监控数据处理事务. 测试应用系统技术: 快照.映射.追踪和标识.测试数据(在真实的系统中的仿真交 ...

随机推荐

  1. Swift 柯里化

    前言 由于柯里化在业务层的应用较少,所以从 Swift 3.0 开始移除了柯里化的用法,但是 Swift 的很多底层特性是使用柯里化来表达的. 1.柯里化 1.1 柯里化简介 柯里化(Currying ...

  2. arcgis server缓存路径修改

    由于空间不够用,需要更换瓦片的输出路径,具体的修改方法如下: 1.打开ArcCatalog,打开GIS服务器,找到已经添加的gis服务器,一般都是机器名,如下所示,右键我的gis服务器(admin-t ...

  3. 分享一个Godaddy的优惠码,可以优惠35%——2013-11-23

    国外的域名注册商就是好,还有优惠码,付费的时候贴上优惠码就能免相应的金额,不错. 在网上找的一个35%优惠的优惠码,可以买域名和主机.(主机就免了,有点贵,域名不错) 我买了个com域名,原本$12. ...

  4. Git教程学习(三)

    主要命令: $ git checkout -- readme.txt #使用暂存区或版本库中最新的版本替换工作区版本 $ git reset HEAD readme.txt # 撤消指定文件的add操 ...

  5. 【iCore4 双核心板_ARM】例程二十二:LWIP_UDP实验——以太网数据传输

    实验现象: 核心代码: int main(void) { system_clock.initialize(); led.initialize(); adc.initialize(); delay.in ...

  6. 【iCore1S 双核心板_ARM】例程一:ARM驱动三色LED

    实验原理: 通过STM32的三个GPIO驱动一个三色LED,引脚PF3接蓝色LED(ARM_LEDB), 引脚PF4接绿色LED(ARM_LEDG),引脚PF5接红色LED(ARM_LEDR),  G ...

  7. Paxos算法1-算法形成理论[转载]

    地址 http://blog.csdn.net/chen77716/article/details/6166675 中文wiki http://zh.wikipedia.org/zh-cn/Paxos ...

  8. 使用echo $? 查看命令是否执行成功

    shell中的特殊变量:变量名含义$0shell或shell脚本的名字$*以一对双引号给出参数列表$@将各个参数分别加双引号返回$#参数的个数$_代表上一个命令的最后一个参数$$代表所在命令的PID$ ...

  9. Sass的安装(windows 10)

    1.下载ruby 下载地址:https://rubyinstaller.org/downloads/ 如果觉得下载速度过慢,可以在我的百度去下载: 链接:https://pan.baidu.com/s ...

  10. ubuntu GCC 版本切换

    (1)  查看gcc以及g++的版本 gcc  -v g++ -v star@ai:~ $ gcc -v Using built-in specs. COLLECT_GCC=gcc COLLECT_L ...