【每日一题】 UVA - 1589 Xiangqi 函数+模拟 wa了两天
题意:背景就是象棋,
题解:坑点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了两天的更多相关文章
- ●UVa 1589 Xiangqi(模拟)
●赘述题意 给出一个中国象棋残局,告诉各个棋子的位置,黑方只有1枚“将”,红方有至少2枚,至多7枚棋子,包含1枚“帅G”,和若干枚“车R”,“马H”,“炮C”.当前为黑方的回合,问黑方的“将”能否在移 ...
- UVA 1589:Xiangqi (模拟 Grade D)
题目: 象棋,黑棋只有将,红棋有帅车马炮.问是否死将. 思路: 对方将四个方向走一步,看看会不会被吃. 代码: 很难看……WA了很多发,还越界等等. #include <cstdio> # ...
- Uva - 1589 - Xiangqi
Xiangqi is one of the most popular two-player board games in China. The game represents a battle bet ...
- [LeetCode每日一题]1143. 最长公共子序列
[LeetCode每日一题]1143. 最长公共子序列 问题 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度.如果不存在 公共子序列 ,返回 0 . 一个字符串 ...
- PL/SQL Challenge 每日一题:2014-3-14 11gR2中带RELIES_ON子句的RESULT_CACHE函数
PL/SQL Challenge 每日一题:2014-3-14 11gR2中带RELIES_ON子句的RESULT_CACHE函数 最先答对且答案未经编辑的puber将获得纪念章一枚(答案不可编辑但可 ...
- 【python】Leetcode每日一题-笨阶乘
[python]Leetcode每日一题-笨阶乘 [题目描述] 通常,正整数 n 的阶乘是所有小于或等于 n 的正整数的乘积.例如,factorial(10) = 10 * 9 * 8 * 7 * 6 ...
- 老男孩IT教育-每日一题汇总
老男孩IT教育-每日一题汇总 第几天 第几周 日期 快速访问链接 第123天 第二十五周 2017年8月25日 出现Swap file….already exists以下错误如何解决? 第122天 2 ...
- CISP/CISA 每日一题 四
CISA 每日一题(答) 连续在线审计技术: 1.系统控制审计检查文件和内嵌审计模型(SCARF/EAM):非常复杂,适用于正常处理不能被中断:通过在组织的主机应用系统中内嵌经特别编写的审计软件,使审 ...
- CISP/CISA 每日一题 三
CISA 每日一题(答) 测试应用控制的有效性包括: 分析计算机应用程序.测试计算机应用程序控制.选择和监控数据处理事务. 测试应用系统技术: 快照.映射.追踪和标识.测试数据(在真实的系统中的仿真交 ...
随机推荐
- PyCharm for Mac(Python 开发工具)破解版安装
1.软件简介 PyCharm 是 macOS 系统上一款 Python 编辑利器,具有智能代码编辑器,能理解 Python 的特性并提供卓越的生产力推进工具:自动代码格式化.代码完成.重构.自动 ...
- [AaronYang]那天有个小孩跟我说Js-NodeJS[AY0]-EJS
按照自己的思路学习Node.Js 随心出发.EJS是Node.js中express框架中使用的一个模版引擎,当然还有Jade 我的学习就靠网上查资料,没有买书系统学,自己整理,如果有用了哪位大神的代码 ...
- C#-MVC开发微信应用(3)--文本消息和图文消息的应答
最近咨询微信的人很多,感觉这块也是一块商机,也为了演示SNF快速开发平台的优势,就用SNF快速开发平台开发出一套微信应用程序.使用<SNF.CodeGenerator>代码生成工具可以节省 ...
- Fraunhofer音频技术为MPEG未来高品质3D音频内容传输的标准依据
OFweek电子工程网讯:世界着名的音频和多媒体技术研究机构Fraunhofer IIS的基于信道/对象的方案获选成为未来MPEG-H 3D音频标准的依据,此项标准旨在传输高品质的3D音频内容.MPE ...
- TitleBar 的那些设置
设置状态栏透明: View decorView = activity.getWindow().getDecorView(); int option = View.SYSTEM_UI_FLAG_LAYO ...
- --save与--save-dev的区别
--save安装的包会在生产和开发环境中都使用: --save-dev的包只在开发环境中使用,在生产环境中就不需要这个包了,不再打包:
- vue用组件构建应用
组件系统是 Vue.js 另一个重要概念,因为它提供了一种抽象,让我们可以用独立可复用的小组件来构建大型应用.如果我们考虑到这点,几乎任意类型的应用的界面都可以抽象为一个组件树: 在 Vue 里,一个 ...
- Swagger使用小记
Swagger是一种框架,用于自动生成Restfull API的文档,而不用开发者自己编写文档.它既可以减少我们创建文档的工作量,同时说明内容又整合入实现代码中,让维护文档和修改代码整合为一体,可以让 ...
- nginx负载均衡一:基础知识
基础信息 nginx 的 upstream目前支持 4 种方式的分配 1).轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除. 2).weight ...
- java注解中的元注解
一:java注解中的元注解 四个元注解分别是:@Target,@Retention,@Documented,@Inherited , 再次强调下元注解是java API提供,是专门用来定义注解的注解, ...