当前位置: 首页 > article >正文

UVa 255 Correct Move

题目分析这是一道关于国际象棋棋盘上王和后移动规则的模拟问题。题目描述了一个8×88 \times 88×8的棋盘格子编号从000到636363编号方式为逐行排列第000行0∼70 \sim 70∼7第111行8∼158 \sim 158∼15依此类推。棋盘上有两个棋子一个王King\texttt{King}King和一个后Queen\texttt{Queen}Queen。状态定义为王的位置和后的位置组成的二元组(king,queen)(king, queen)(king,queen)。当两个棋子不在同一格时状态是合法的。移动规则王的移动可以上下左右移动恰好111格但不能移动到后所在的位置。后的移动可以上下左右移动任意多格至少111格但不能越过王的位置即路径上不能有王。额外限制允许移动一个移动被称为允许的当且仅当移动本身是合法的移动的目标位置不是对方可以移动到的位置。换句话说王不能移动到后能走到的格子后也不能移动到王能走到的格子。问题要求对于每组输入包含三个整数kingkingking,queenqueenqueen,new_queennew\_queennew_queen需要依次判断给定的状态是否合法king≠queenking \neq queenkingqueen后的移动是否合法后能否从当前位置合法地移动到new_queennew\_queennew_queen后的移动是否允许移动目标是否不在王的可移动范围内如果以上都满足更新后的位置判断在新状态下王是否被锁死即王没有任何允许的移动。输出对应关系条件输出状态不合法kingqueenking queenkingqueenIllegal state\texttt{Illegal state}Illegal state状态合法但后的移动不合法Illegal move\texttt{Illegal move}Illegal move状态合法后的移动合法但不允许Move not allowed\texttt{Move not allowed}Move not allowed状态合法后的移动合法且允许且新状态下王有允许的移动Continue\texttt{Continue}Continue状态合法后的移动合法且允许但新状态下王无允许的移动Stop\texttt{Stop}Stop解题思路题目的核心在于正确实现三个判定函数isLegalMove\texttt{isLegalMove}isLegalMove判断后的移动是否合法。isAllowedMove\texttt{isAllowedMove}isAllowedMove判断后的移动是否允许即目标位置是否在王的一步可达位置内。isStop\texttt{isStop}isStop判断在新状态下王是否被锁死。棋盘坐标与编号转换棋盘编号从000到636363第rrr行第ccc列的编号为r×8cr \times 8 cr×8c。常用转换行号rowpos/8row pos / 8rowpos/8列号colpos%8col pos \% 8colpos%8同一行的格子范围[row×8,(row1)×8−1][row \times 8, (row1) \times 8 - 1][row×8,(row1)×8−1]同一列的格子pos,pos±8,pos±16,…pos, pos \pm 8, pos \pm 16, \dotspos,pos±8,pos±16,…1. 判断后的合法移动isLegalMove\texttt{isLegalMove}isLegalMove后的移动是直线的分为四个方向上、下、左、右。在每个方向上后可以移动任意多格但不能越过王的位置。实现方法向上列不变行递减从queen−8queen - 8queen−8开始每次减888直到遇到王或超出棋盘边界。向下列不变行递增从queen8queen 8queen8开始每次加888。向左行不变列递减从queen−1queen - 1queen−1开始每次减111但不能跨行即左边界为当前行的最左列。向右行不变列递增从queen1queen 1queen1开始每次加111但不能跨行即右边界为当前行的最右列。在这些方向上收集所有可以到达的格子不包括被王阻挡之后的格子然后检查movemovemove是否在集合中。注意由于王可能位于后的移动路径上需要提前终止该方向的搜索。2. 判断后的移动是否允许isAllowedMove\texttt{isAllowedMove}isAllowedMove后的移动允许当且仅当目标位置movemovemove不是王的一步可达位置。王的一步可达位置曼哈顿距离为111且在同一行或同一列上king−8king - 8king−8如果king−8≥0king - 8 \ge 0king−8≥0下king8king 8king8如果king864king 8 64king864左king−1king - 1king−1如果kingkingking不在最左列即king%8≠0king \% 8 \neq 0king%80右king1king 1king1如果kingkingking不在最右列即(king%8)≠7(king \% 8) \neq 7(king%8)7如果movemovemove等于上述任一位置则后的移动不允许否则允许。3. 判断王是否被锁死isStop\texttt{isStop}isStop在新的状态王位置不变后位置变为movemovemove下判断王是否有任何允许的移动。首先确定王的所有合法移动位置上下左右各一步且不能与后位置重合。然后需要排除后能走到的格子。注意这里“后能走到的格子”是指在新状态下后从新位置出发可以走到的所有格子包括新位置本身注意题目描述后不能移动到王的位置但王也不能移动到后能走到的位置。实际上后移动时不能“遇到”王但后占据的位置本身王是不能进入的。因此在判断王的允许移动时需要排除后的新位置本身因为两个棋子不能在同一格后从新位置出发沿四个方向直线可以到达的所有格子同样遇到王时停止因为王的阻挡会使后不能到达更远的格子实现方法收集后的“势力范围”向上、向下、向左、向右直线延伸遇到王则停止不包括王本身因为王在格子上后不能越过。然后检查王的四个可能移动位置如果任何一个位置不在后的势力范围内并且该位置在棋盘内且不是后本身则王有允许的移动返回false\texttt{false}false不是 Stop。否则返回true\texttt{true}true王被锁死是 Stop。代码实现// Correct Move// UVa ID: 255// Verdict: Accepted// Submission Date: 2016-05-12// UVa Run Time: 0.110s//// 版权所有C2016邱秋。metaphysis # yeah dot net#includebits/stdc.husingnamespacestd;// 判断后的移动是否合法boolisLegalMove(intking,intqueen,intmove){setintnext;// 存储后可以合法移动到的所有位置// 向上移动列不变行递减for(intiqueen-8;i0;i-8){if(iking)// 遇到王不能越过停止break;next.insert(i);}// 向下移动列不变行递增for(intiqueen8;i64;i8){if(iking)// 遇到王停止break;next.insert(i);}// 向左移动行不变列递减不能跨行for(intiqueen-1;i(queen/8)*8;i--){if(iking)// 遇到王停止break;next.insert(i);}// 向右移动行不变列递增不能跨行for(intiqueen1;i(queen/81)*8;i){if(iking)// 遇到王停止break;next.insert(i);}// 检查目标位置是否在合法移动集合中returnnext.count(move)0;}// 判断后的移动是否允许即目标位置不能是王一步能到的位置boolisAllowedMove(intking,intmove){// 检查王的上方if((king-8)0(king-8)move)returnfalse;// 检查王的下方if((king8)64(king8)move)returnfalse;// 检查王的左方注意不能跨行if((king-1)(king/8*8)(king-1)move)returnfalse;// 检查王的右方if((king1)((king/81)*8)(king1)move)returnfalse;returntrue;}// 判断在新状态下王是否被锁死没有任何允许的移动boolisStop(intking,intqueen){setintdisallowed;// 存储后能走到的所有格子包括后本身// 向上收集后的势力范围for(intiqueen;i0;i-8)disallowed.insert(i);// 向下收集后的势力范围for(intiqueen;i64;i8)disallowed.insert(i);// 向左收集后的势力范围for(inti(queen/8)*8;i(queen/81)*8;i)disallowed.insert(i);// 检查王的上方是否可走if((king-8)0disallowed.count((king-8))0)returnfalse;// 检查王的下方是否可走if((king8)64disallowed.count((king8))0)returnfalse;// 检查王的左方是否可走if((king-1)(king/8*8)disallowed.count((king-1))0)returnfalse;// 检查王的右方是否可走if((king1)((king/81)*8)disallowed.count((king1))0)returnfalse;// 四个方向都不可走则王被锁死returntrue;}intmain(){cin.tie(0);cout.sync_with_stdio(false);intking,queen,move;while(cinkingqueenmove){// 1. 检查状态是否合法if(kingqueen){coutIllegal state\n;continue;}// 2. 检查后的移动是否合法if(isLegalMove(king,queen,move)false){coutIllegal move\n;continue;}// 3. 检查后的移动是否允许if(isAllowedMove(king,move)false){coutMove not allowed\n;continue;}// 4. 更新后的位置判断王是否被锁死queenmove;if(isStop(king,queen))coutStop\n;elsecoutContinue\n;}return0;}总结本题的关键在于准确理解三种判定逻辑合法移动后的直线路径不被王阻挡。允许移动后的目标位置不与王的可移动位置冲突。锁死判定在新状态下王的所有可能移动位置都在后的攻击范围内。代码实现时注意边界条件棋盘边缘、行边界以及王作为障碍物对后移动的影响。使用set\texttt{set}set来存储后的可达位置可以简化判断逻辑。

相关文章:

UVa 255 Correct Move

题目分析 这是一道关于国际象棋棋盘上王和后移动规则的模拟问题。题目描述了一个 888 \times 888 的棋盘,格子编号从 000 到 636363,编号方式为逐行排列(第 000 行:0∼70 \sim 70∼7,第 111 行:8∼158 \sim…...

5分钟快速上手!网易云无损音乐下载完整指南:免费获取高品质音乐

5分钟快速上手!网易云无损音乐下载完整指南:免费获取高品质音乐 【免费下载链接】Netease_url 网易云无损解析 项目地址: https://gitcode.com/gh_mirrors/ne/Netease_url 想要免费获取网易云音乐的无损音质歌曲吗?Netease_url项目让你…...

如何快速掌握《鸣潮》游戏模组开发:专业逆向工程与AES加密技术完整指南

如何快速掌握《鸣潮》游戏模组开发:专业逆向工程与AES加密技术完整指南 【免费下载链接】wuwa-mod Wuthering Waves pak mods 项目地址: https://gitcode.com/GitHub_Trending/wu/wuwa-mod WuWa-Mod是一个专门为热门游戏《鸣潮》(Wuthering Waves…...

CANN/asc-devkit算子动态库配置

KernelSo 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: https://gitcode.com/c…...

如何在Python中实现轻量级人脸与虹膜检测:基于TensorFlow Lite的解决方案

如何在Python中实现轻量级人脸与虹膜检测:基于TensorFlow Lite的解决方案 【免费下载链接】face-detection-tflite Face and iris detection for Python based on MediaPipe 项目地址: https://gitcode.com/gh_mirrors/fa/face-detection-tflite 在当今的计…...

eLabFTW深度解析:开源电子实验记录本的技术架构与实战应用

eLabFTW深度解析:开源电子实验记录本的技术架构与实战应用 【免费下载链接】elabftw :notebook: eLabFTW is the most popular open source electronic lab notebook for research labs. 项目地址: https://gitcode.com/gh_mirrors/el/elabftw eLabFTW作为最…...

MapReduce数据倾斜解决方案

前言 在MapReduce生产环境中,数据倾斜是最常见也最致命的性能杀手。一个看似完美的分布式程序,可能因为某个ReduceTask处理的数据量远超其他任务,导致整个作业卡死数小时甚至失败。本文将从倾斜现象识别、根因分析、六大解决方案到实战案例&…...

如何安全提取未知文件:unblob的5大安全防护机制实战指南

如何安全提取未知文件:unblob的5大安全防护机制实战指南 【免费下载链接】unblob Extract files from any kind of container formats 项目地址: https://gitcode.com/gh_mirrors/un/unblob 在数字取证和固件分析工作中,我们经常需要处理来源不明…...

MySQL事务与锁机制深度解析

摘要:事务与锁是 MySQL 并发控制的两大基石。本文从 ACID 四大特性出发,深入讲解 InnoDB 的 MVCC 多版本并发控制机制、四种隔离级别下的并发问题、七种锁类型(从表锁到行锁、间隙锁、Next-Key 锁),以及死锁的产生原因…...

如何通过纯JavaScript拖拽构建器实现零代码网站开发

如何通过纯JavaScript拖拽构建器实现零代码网站开发 【免费下载链接】VvvebJs Drag and drop page builder library written in vanilla javascript without dependencies or build tools. 项目地址: https://gitcode.com/gh_mirrors/vv/VvvebJs 在网站开发领域&#xf…...

GitHub Desktop中文汉化解决方案:智能文本映射技术实现界面本地化

GitHub Desktop中文汉化解决方案:智能文本映射技术实现界面本地化 【免费下载链接】GitHubDesktop2Chinese GithubDesktop语言本地化(汉化)工具 【GitHub桌面客户端中文汉化】 项目地址: https://gitcode.com/gh_mirrors/gi/GitHubDesktop2Chinese GitHub De…...

读《AI时代成为行业精英的融合型学习法》

这段时间看了日本科普作家竹内熏写的《AI时代成为行业精英的融合型学习法》一书,想说说自己的体会。这是一本很薄的书,一共100来页,个人觉得,在现在这个什么都不会的小白也能用AI写出几万字文章的时代,这本书可以算得上…...

ChatGPT-Web-Midjourney-Proxy终极指南:10大功能特性全解析

ChatGPT-Web-Midjourney-Proxy终极指南:10大功能特性全解析 ChatGPT-Web-Midjourney-Proxy是一个革命性的开源项目,它将ChatGPT对话、Midjourney图像生成、GPTs应用商店以及多种AI功能整合到一个统一的Web界面中。这个项目为开发者和普通用户提供了一站…...

chatgpt-web-midjourney-proxy的Tauri桌面应用:跨平台AI客户端构建终极指南

chatgpt-web-midjourney-proxy的Tauri桌面应用:跨平台AI客户端构建终极指南 想要在本地轻松体验ChatGPT、Midjourney和GPTs的强大功能吗?chatgpt-web-midjourney-proxy项目的Tauri桌面应用为你提供了完美的解决方案!这款跨平台AI客户端让AI助…...

chatgpt-web-midjourney-proxy的移动端PWA应用:离线AI工具开发指南

chatgpt-web-midjourney-proxy的移动端PWA应用:离线AI工具开发指南 chatgpt-web-midjourney-proxy项目是一个强大的AI工具集成平台,将ChatGPT、Midjourney绘图和GPTs功能统一在一个界面中。通过PWA技术,这个项目可以轻松转换为移动端离线应用…...

ChatGPT-Web-Midjourney-Proxy 终极备份策略:数据安全与灾难恢复完全指南

ChatGPT-Web-Midjourney-Proxy 终极备份策略:数据安全与灾难恢复完全指南 ChatGPT-Web-Midjourney-Proxy 是一款集成 ChatGPT、Midjourney 和 GPTs 功能的一站式 UI 工具,为用户提供便捷的 AI 交互体验。在日常使用中,数据安全与灾难恢复至关…...

YimMenu:GTA5游戏增强工具从入门到精通完全指南

YimMenu:GTA5游戏增强工具从入门到精通完全指南 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi/YimMenu …...

0603光刻机 第六篇:EUV超精密光学系统(S级 长期死磕突破)第3小节:超高纯氟化钙材料难点

第六篇:EUV超精密光学系统(S级 长期死磕突破) 第3小节:超高纯氟化钙材料难点(深紫外配套核心,全维度死磕解析) 前置硬核声明 氟化钙单晶(CaF₂)是DUV深紫外光刻核心光学基…...

终极指南:如何用AhabAssistantLimbusCompany彻底解放《Limbus Company》游戏时间

终极指南:如何用AhabAssistantLimbusCompany彻底解放《Limbus Company》游戏时间 【免费下载链接】AhabAssistantLimbusCompany AALC,PC端Limbus Company小助手。AALC,Limbus Company Assistant on PC 项目地址: https://gitcode.com/gh_mi…...

0602光刻机 第六篇:EUV超精密光学系统(S级 长期死磕突破)超精密反射镜技术壁垒

第2小节:超精密反射镜技术壁垒(基底加工镀膜检测,全量化死磕)前置硬核声明EUV整机90%的成像误差、波像差、良率波动,最终全部归因于超精密反射镜的制造壁垒。EUV不是“普通光学抛光”,是原子级表面重构、皮…...

0601光刻机 第六篇:EUV超精密光学系统(S级 长期死磕突破)第1小节:光学物镜核心原理

第六篇:EUV超精密光学系统(S级 长期死磕突破) 第1小节:光学物镜核心原理(硬核无水分,从物理本质到工程实现) 前置硬核声明 EUV物镜是光刻机的“原子级眼睛”,13.5nm波长决定透射方案…...

摩尔线程MUSA生态到底解决了什么,没解决什么?——一个开发者的迁移权衡手记

摩尔线程MUSA生态到底解决了什么,没解决什么?——一个开发者的迁移权衡手记 先说结论MUSA对CUDA的100%兼容更多是API层面的,解决的是代码能不能跑的问题,但实际性能调优和热点算子库的成熟度才是决定“跑得快不快”的关键。进入SG…...

2026有赞春季发布会:有效果的AI驱动增长,智能体和数字员工交出成绩单

5月21日,有赞2026年春季发布会在杭州举办,主题是“有效果的AI”。过去一年,有赞智能体和数字员工已经迈入交付结果的新阶段。数据显示,2025年有赞AI智能体活跃使用商家18220个,整体调用量超3600万次,引导成…...

Onekey终极指南:3分钟掌握Steam清单下载完整教程

Onekey终极指南:3分钟掌握Steam清单下载完整教程 【免费下载链接】Onekey Onekey Steam Depot Manifest Downloader 项目地址: https://gitcode.com/gh_mirrors/one/Onekey Onekey是一款专业的Steam Depot Manifest下载工具,能够帮助游戏玩家和开…...

WZLBadge最佳实践:解决徽章显示中的常见问题和性能优化

WZLBadge最佳实践:解决徽章显示中的常见问题和性能优化 【免费下载链接】WZLBadge //An one-line tool to show styles of badge for UIView 项目地址: https://gitcode.com/gh_mirrors/wz/WZLBadge WZLBadge是一款轻量级的iOS徽章显示工具,能够帮…...

LicenseFinder高级配置指南:自定义许可证规则与决策继承

LicenseFinder高级配置指南:自定义许可证规则与决策继承 【免费下载链接】LicenseFinder Find licenses for your projects dependencies. 项目地址: https://gitcode.com/gh_mirrors/li/LicenseFinder LicenseFinder是一款强大的开源许可证管理工具&#xf…...

大模型可解释性技术突破:破解AI黑盒,筑牢人工智能落地根基

生成式大模型快速普及的同时,AI黑盒问题成为制约行业深度落地的核心瓶颈。传统大模型的推理过程隐蔽、决策逻辑不可追溯、输出结果不可控,模型出错无溯源、偏见无修正、风险无预判,在金融、医疗、政务、工业控制等高精、高安全、高合规场景&a…...

Orbit间隔重复算法深度解析:从理论到实践

Orbit间隔重复算法深度解析:从理论到实践 【免费下载链接】orbit Experimental spaced repetition platform for exploring ideas in memory augmentation and programmable attention 项目地址: https://gitcode.com/gh_mirrors/orbit1/orbit Orbit是一个实…...

snnTorch NIR导出功能详解:实现跨框架模型转换

snnTorch NIR导出功能详解:实现跨框架模型转换 【免费下载链接】snntorch Deep and online learning with spiking neural networks in Python 项目地址: https://gitcode.com/gh_mirrors/sn/snntorch snnTorch是一个基于Python的脉冲神经网络(SN…...

终极歌词神器:5分钟学会用LDDC为你的音乐库添加完美歌词

终极歌词神器:5分钟学会用LDDC为你的音乐库添加完美歌词 【免费下载链接】LDDC 简单易用的精准歌词(逐字歌词/卡拉OK歌词)下载匹配工具|A simple and user-friendly tool for downloading and matching precise lyrics (word-by-word lyrics/Karaoke lyrics) 项目…...