小模拟

news/2025/3/23 9:55:44/文章来源:https://www.cnblogs.com/whaled/p/18786210

题目链接

祭第一次场切纯模拟。

众所周知纯模拟的难点在于如何快速的写出来和调试,所以这里主要列一些容易出错的点和调试和代码技巧。

BUG

  • 多测不清空
  • 读入
  • 越界
  • 马跳两格导致坐标为负数
  • 做越界处理的时候和 \(n\)\(\min\)
  • 判断黑白棋
  • 兵的方向
  • 有棋子挡住时没有 break

调试

  • 手搓数据
  • 静态查错
  • 小黄鸭查错法(拉一个队友给他解释你的代码,解释着你就发现 BUG 了(((
  • 暴力重构

代码

  • 把一些常用的操作用函数表示(例如判断黑白,判断获胜
  • 简化代码(例如没必要给黑棋和白棋写单独的代码,只需要判断是否和王的颜色不同就行
  • 善用 #define (这样可以极大让代码更清晰明了并的减小代码长度和别人的阅读体验

如果您有别的 BUG、调试或代码技巧欢迎在评论区补充~

我的代码去头只有 2k 左右,压完后应该在 1k 左右,应该还算简洁吧。

CODE(已去头)

const int fx[] = {-2, -2, 2, 2, -1, -1, 1, 1};
const int fy[] = {-1, 1, -1, 1, -2, 2, -2, 2};int n = 8;
char m[26][26];void init() {f(i, n) f(j, n) m[i][j] = 0;char a;int u = 1, v = 1;while (u <= n) {sf(a);if (a == '/') con;else if (isd(a)) v += a - '0';else m[u][v] = a, v ++;if (v == 9) u ++, v = 1;}fo(i, 0, n + 1) m[0][i] = m[i][0] = m[n + 1][i] = m[i][n + 1] = 'P';
}
int d(char s) {re ('a' <= s && s <= 'z');}
bool tag;
void win(int s) {tag = true;if (s) ut("check"); else ut("CHECK");}
#define k(s) (s == 'k' || s == 'K')
#define gg(a, b) (k(b) && d(a) != d(b))
#define M(x) ((x) < 0 ? 0 : ((x) > n ? (n + 1) : (x)))void SOLVE() {char u, v;init();f(i, n) {f(j, n) {#define jlz(x) \ //因为这里判断攻击要用很多次,所以这里给他define了v = x;\if (!v) con;\if (gg(u, v)) re win(d(u));\else brk;u = m[i][j];if (!u || k(u)) con;if (u == 'r' || u == 'R') {f(k, n) {jlz(m[i - k][j]);}f(k, n) {jlz(m[i + k][j]);}f(k, n) {jlz(m[i][j - k]);}f(k, n) {jlz(m[i][j + k]);}}else if (u == 'P' || u == 'p') {if (d(u)) {if (gg(u, m[i + 1][j - 1])) re win(d(u));if (gg(u, m[i + 1][j + 1])) re win(d(u));}else {if (gg(u, m[i - 1][j - 1])) re win(d(u));if (gg(u, m[i - 1][j + 1])) re win(d(u));}}else if (u == 'B' || u == 'b') {f(k, n) {jlz(m[i - k][j - k]);}f(k, n) {jlz(m[i - k][j + k]);}f(k, n) {jlz(m[i + k][j - k]);}f(k, n) {jlz(m[i + k][j + k]);}}else if (u == 'Q' || u == 'q') { //直接粘的车和象(最好是写个define,不过这里懒了f(k, n) {jlz(m[i - k][j]);}f(k, n) {jlz(m[i + k][j]);}f(k, n) {jlz(m[i][j - k]);}f(k, n) {jlz(m[i][j + k]);}f(k, n) {jlz(m[i - k][j - k]);}f(k, n) {jlz(m[i - k][j + k]);}f(k, n) {jlz(m[i + k][j - k]);}f(k, n) {jlz(m[i + k][j + k]);}}else if (u == 'N' || u == 'n') {fo(k, 0, 7) {v = m[M(i + fx[k])][M(j + fy[k])];if (gg(u, v)) re win(d(u));}}}}
}
signed main() {int T; sf(T);while (T --) {tag = false;SOLVE();if (!tag) ut("none");}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/903358.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

读DAMA数据管理知识体系指南27文件和内容管理概念(上)

读DAMA数据管理知识体系指南27文件和内容管理概念(上)1. 文件和内容管理 1.1. 文件和内容管理是指针对存储在关系型数据库之外的数据和信息的采集、存储、访问和使用过程的管理 1.2. 重点在于保持文件和其他非结构化或半结构化信息的完整性,并使这些信息能够被访问 2. 业务驱…

(Windows11)如何自编译Aseprite(像素画软件) - 1.3.12版本

如何自编译Aseprite(像素画软件)-windows-以1.3.12版本为例 1. Aseprite说明开源像素画软件,自带调色板 Steam也可购买:steam购买2. 官方编译说明(Windows系统下) 官方库提供了win、mac以及Linux编译方式 文档地址:https://github.com/aseprite/aseprite/blob/main/INSTAL…

BUAA_OO_Unit1总结

Unit1 总结 1. 程序结构分析 1.1 代码结构(类图)1.2 类的度量统计类名 属性个数 方法个数 方法名 方法规模(代码行) 控制分支数目 类总代码规模(行)Function 4 6 Function 5 0 85sort 10 1 (双重循环)getCan 20 3 (条件+循环嵌套)huanCan 15 2 (条件替换逻辑)prework 15 …

永久免费!支持视频号下载,2025最新版本

在昨天的推文中给大家分享了一款非常不错的 Ai 工具,含有 Ai 一键抠图、Ai 无损放大等功能,对于设计和作图的小伙伴来说,非常的有帮助这款Ai 合集工具,内容丰富,且使用简单,纯在线使用,不消耗本地电脑硬件内存,有需要的小伙伴可以点击下方链接体验 一键Ai抠图、无损放大…

AbstractAutoProxyCreator#postProcessBeforeInstantiation

一、定义 postProcessBeforeInstantiation 是 Spring AOP 动态代理的核心扩展点,通过提前创建代理对象优化性能,并支持丰富的自定义逻辑(如事务、安全) 二、代码分析 public Object postProcessBeforeInstantiation(Class<?> beanClass, String beanName) throws Be…

Day20_javascanner_struct

Java JavaDoc javadoc命令是用来生成自己API文档的 参数信息: @author 作者名 @version 版本号 @since 指明需要最早使用的jdk版本 @param 参数名 @return 返回值情况 @throws 异常抛出情况 /*** @author XXX* @version 1.0* @since 1.8*/public class Doc {String name;/*** …

k8s基本字段

k8s基本字段 limits字段 此字段限制的是硬件的资源,如果容器尝试申请超过限制的内存将会终止容器 requests字段 此字段限制的是容器可以请求的资源,可以超出request申请额外的资源,但是不能超过limits, 500m等于0.5个CPU本地临时性文件,采用这种配置时,你会把所有类型的临…

【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(3)

比赛链接 本文发布于博客园,会跟随补题进度实时更新,若您在其他平台阅读到此文,请前往博客园获取更好的阅读体验。 跳转链接:https://www.cnblogs.com/TianTianChaoFangDe/p/18786128 开题 + 补题情况 很菜的一把,就开了三个签到题,1001 Lucas 定理花了好久才看出来,明明…

51单片机学习笔记-3

串口通信UART(universal asynchronous receiver transmitter,通用异步收发器):可用来实现串口通信。串口硬件:基础串口包含TXD/RXD两个通信线,他们交叉连接。(如DB9通常使用2(RXD),3(TXD),5(GND)。) 当串口两头电平标准不一样时,需要叫电平转换芯片。TTL电平:5V表示1,…

微信小程序 -2025/3/22

HttpClient 介绍:核心api发送请求步骤小程序目录结构小程序页面组成微信登录 发送请求

应用打包测试

用HBuilder打包了一个之前写着玩的html页面