题意:背景就是象棋,

题解:坑点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. 多网卡环境下Eureka服务注册IP选择问题

    一.问题场景 服务器上分别配置了eth0, eth1和eth2三块网卡,只有eth1的地址可供其它机器访问,eth0和eth2的 IP 无效.在这种情况下,服务注册时Eureka Client会自动选 ...

  2. SQL Server 数据库基础笔记分享(上)

    前言 本文是个人学习SQL Server 数据库时的以往笔记的整理,内容主要是对数据库的基本增删改查的SQL语句操作和约束,视图,存储过程,触发器的基本了解. 注:内容比较基础,适合入门者对SQL S ...

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

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

  4. Spark 论文篇-Spark:工作组上的集群计算的框架(中英双语)

    论文内容: 待整理 参考文献: Spark: Cluster Computing with Working Sets. Matei Zaharia, Mosharaf Chowdhury, Micha ...

  5. Visual Studio 由于缺少调试目标

    问题背景 Visual Studio启动winform项目时提示:由于缺少调试目标,Visual Studio 无法开始调试. 解决方法 解决方案配置 → 配置管理器 → 勾选[生成]选项 End C ...

  6. mercurial的几个易用性小技巧

    其实这两年,能够采用mercurial的项目我都尽量用,甚至有些上游是git的,或者需要托管到公司内gitlab上与别人协作的,我都装上hg-git.无它,只是因为mercurial易用性比git好得 ...

  7. 【原】使用Json作为Python和C#混合编程时对象转换的中间文件

    一.Python中自定义类对象json字符串化的步骤[1]   1. 用 json 或者simplejson 就可以: 2.定义转换函数: 3. 定义类 4. 生成对象 5.dumps执行,引入转换函 ...

  8. Java知多少(24)包装类、拆箱和装箱详解

    虽然 Java 语言是典型的面向对象编程语言,但其中的八种基本数据类型并不支持面向对象编程,基本类型的数据不具备“对象”的特性——不携带属性.没有方法可调用. 沿用它们只是为了迎合人类根深蒂固的习惯, ...

  9. Android Wifi 主动扫描 被动扫描

    介绍主动扫描,被动扫描以及连接的wifi的扫描过程 参考文档 <802.11无线网络权威指南> <80_Y0513_1_QCA_WCN36X0_SOFTWARE_ARCHITECTU ...

  10. 开源项目收集:博客系统solo

    前言 一个好的项目,我不会吝啬于推荐之语.找了好久,想要一个最简单的个人博客.由于个人不怎么会写前端页面,怎么也看不到漂亮的设计.没有漂亮的前台都不知道后台需要写一些什么! 这个项目至少目前满足了我的 ...