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

Atcoder-ABC-454-E LRUD Moving

问题描述

给你三个正整数 N,A,BN,A,B,保证 AA 和 BB 都在 11 到 NN 之间(含端点)。

有一个 N×NN×N 的格子棋盘。棋盘中第 ii 行(从上往下数)第 jj 列(从左往右数)的格子记为 (i,j)(i,j)。起始时,棋子放在格子 (1,1)(1,1) 上。

你需要通过连续走 N2−2N2−2 步,每一步都只能向上下左右相邻的格子移动,把棋子从 (1,1)(1,1) 移动到 (N,N)(N,N),并且要保证除了 (A,B)(A,B) 这个格子以外,所有格子都被访问过一次且仅一次(中途不能重复访问任何格子,包括起点 (1,1)(1,1) 和终点 (N,N)(N,N))。

请判断是否存在这样一条路径,如果存在,请输出其中一条。

你需要处理 TT 组测试数据。

约束条件

  • 1≤T≤50001≤T≤5000
  • 2≤N≤1032≤N≤103
  • 1≤A,B≤N1≤A,BN
  • (A,B)≠(1,1),(N,N)(A,B)\=(1,1),(N,N)
  • 所有测试数据中 N2N2 的总和不超过 106106。
  • 所有输入均为整数。

输入格式

输入从标准输入读取,格式如下:

TT
case1case1
case2case2
⋮⋮
caseTcaseT

每组测试数据格式为:

NN AA BB

输出格式

请按顺序输出每组测试数据的答案,每组答案之间换行。

若不存在满足条件的路径,输出 No

若存在,请按如下格式输出:

Yes
S1S2…SN2−2S1S2…SN2−2

其中 SkS**k 表示第 kk 步移动的方向,假设移动前棋子在 (i,j)(i,j):

  • Sk=S**k= L 表示棋子从 (i,j)(i,j) 移动到 (i,j−1)(i,j−1)
  • Sk=S**k= R 表示棋子从 (i,j)(i,j) 移动到 (i,j+1)(i,j+1)
  • Sk=S**k= U 表示棋子从 (i,j)(i,j) 移动到 (i−1,j)(i−1,j)
  • Sk=S**k= D 表示棋子从 (i,j)(i,j) 移动到 (i+1,j)(i+1,j)

如果有多条满足条件的路径,输出任意一条即可。

image-20260424204818606

看第一个测试用例。

棋子从 (1,1)(1,1) 开始,按下面的步骤移动两步:

  • 向下移动,棋子来到 (2,1)(2,1)。
  • 向右移动,棋子来到 (2,2)(2,2)。

这条移动序列满足题目要求。

算法分析

运用黑白染色

image-20260424205737167

如上图所示,我们要从黑->黑,如果n奇数或a+b是偶数就一定无解,输出“No”。

输出路线包含以下两种:

​ 1.当a<2并且b<2时,就可以直接按照蛇形的路线去输出,跳过禁点即可.

​ 2.当a>2或b>2时,就两行(两列)的按蛇形输出路径,把这两行(两列)“删除“,直到a<2(b<2),再做第一步的操作即可。

AC代码:

#include <bits/stdc++.h>
using namespace std;
int T;
int n,a,b;
void solve(){if(n%2==1 || (a+b)%2==0){cout<<"No\n";return ;}bool flag;if(a%2==1){flag = true;}else{flag = false;}if(flag==false){swap(a,b);}#define lt j--,s+=flag?'L':'U'#define rt j++,s+=flag?'R':'D'#define up i--,s+=flag?'U':'L'#define dn i++,s+=flag?'D':'R'int i = 1;int j = 1;string s;for(; i<a; dn){if(i%2==1){for(; j<n; rt);}else{for(; j>1; lt);}}dn;rt;for(; j<b;){up;rt;dn;rt;}for(; j<n;){rt;up;rt;dn;}dn;for(; i<=n;){if(i%2==1){for(; j>1;){lt;}}else{for(; j<n;){rt;}}dn;}s.pop_back();cout<<"Yes\n"<<s<<endl;
}
int main(){cin>>T;while(T--){cin>>n>>a>>b;solve();}return 0;
}
http://www.jsqmd.com/news/694851/

相关文章:

  • 从混淆矩阵到决策曲线:用Matplotlib一步步拆解DCA背后的净获益计算
  • Phi-3.5-mini-instruct网页版惊艳效果:将微信聊天记录→会议纪要→待办事项清单三步生成
  • 2032 年全球微型直流电动机市场将达 226.5 亿美元
  • 基于YOLOv26深度学习算法的社区路灯故障检测系统研究与实现
  • C++函数重载和缺省参数:告别‘iAdd’和‘dAdd’,写出更优雅的代码
  • 【MATLAB源码-第423期】基于MATLAB的机器视觉与多特征融合迁移学习的道路裂多类别缺陷检测仿真。
  • 仅限首批200家三甲医院技术科获取的VSCode医疗校验配置包(含NMPA审评要点映射表)
  • AI图像分层终极指南:3分钟掌握layerdivider完整教程
  • 3步快速教程:免费在Windows 11上运行Android应用的完整方案
  • 《PySide6 GUI开发指南:QML核心与实践》 第八篇:性能优化大师——QML应用性能调优实战
  • Jetson Xavier NX开机慢?试试调整UEFI这3个设置,启动速度立竿见影
  • 【VSCode协作效率翻倍实战手册】:基于LSP+CRDT双引擎重构的6步优化路径,仅限内部团队验证的3项未公开配置
  • 2026-2032期间,电池包断路单元(BDU)市场年复合增长率(CAGR)为9.1%
  • 系统进入强震荡或失稳状态
  • 从Colab到Kaggle:手把手教你用Accelerate在免费GPU/TPU笔记本里跑通PyTorch大模型训练
  • 【嵌入式IDE迁移避坑白皮书】:告别Keil/IAR!用VSCode实现同等专业级调试能力——含反汇编窗口同步、RTOS线程视图、硬件断点精准控制
  • 2026年研学旅行机构寻找实力GEO服务商:选型标准与主流服务商推荐 - 商业小白条
  • 从实战复盘到技巧精讲:一次DASCTF解题的深度剖析与通用Writeup方法论
  • Python数据科学:目标变量变换技术详解与应用
  • 如何永久保存微信聊天记录并生成个性化年度报告
  • ResNet50V2学习笔记
  • 30天快速上手Python-01 开发环境 PyCharm
  • 机器学习中的近似方法:从数学基础到工程实践
  • Qianfan-OCR企业实操:合同文档表格Markdown识别+条款抽取落地案例
  • 奢侈品护理培训 - GrowthUME
  • 算法训练营第十一天| 80.删除有序数组中的重复项||
  • WeChatMsg终极指南:3步永久保存微信聊天记录,让AI记住你的珍贵回忆
  • ESP32接HC-SR04超声波模块,5V Echo信号怎么安全处理?一个电阻分压电路搞定
  • 新手避坑指南:从下载到验证,图文详解JDK1.8和JDK17环境变量配置全流程
  • 机器学习指标解析:AUC与KS值