CCF-CSP第38次认证第二题——机器人复健指南(满分题解)

题目背景

西西艾弗岛某山脉深处出土了一台远古机器人,具体年代已不可考。初步修缮后,研究人员尝试操控机器人进行些简单的移动。

题目描述

整个实验场地被划分为 n×n个方格,从 (1,1) 到 (n,n) 进行编号。机器人只能在这些方格间移动,不能走出场地范围。 如下图所示,假设机器人当前位于 (x,y),那么接下来可以向周围八个方向跳跃移动(如果目标方格在场地范围内):

若机器人只能跳动不超过 k 步,场地内有多少方格(包括起始位置)可以抵达?

输入格式

从标准输入读入数据。

输入的第一行包含空格分隔的两个正整数 n 和 k,分别表示场地大小和跳动步数。

输入的第二行包含空格分隔的两个正整数 x 和 y,表示机器人的起始位置(保证位于场地内)。

输出格式

输出到标准输出。

输出一个整数,表示 k 步内可以抵达的方格总数。

样例1输入

4 1 1 1 

样例1输出

3 

样例2输入

4 2 1 1 

样例2输出

8 

样例2解释

如下图所示,初始位置、第一步和第二步跳跃抵达的位置总计为 8。

子任务

80% 的测试数据满足:k≤3;

全部的测试数据满足:n、k 均大于 0 且不超过 100。

题解

可以使用BFS或DFS进行搜索。在DFS实现中,步数作为递归函数的参数传递;而在BFS实现中,步数需要作为队列元素的附加参数存储。

实现细节

dx 和 dy 数组分别表示移动方向,st 数组用于记录访问状态,全局变量 cnt 统计已访问节点的数量。需要特别处理边界判断,同时统计的节点数包括所有经过的位置,而不仅仅是终点。

代码

#include<bits/stdc++.h> using namespace std; const int N=110; int n,k,x,y; int a[N][N]; bool st[N][N]; int dx[8]={1,2,1,2,-1,-2,-1,-2},dy[8]={2,1,-2,-1,2,1,-2,-1}; int cnt; void dfs(int x,int y,int num){ st[x][y]=true; cnt++; if(num==k)return; for(int i=0;i<8;i++){ int a=x+dx[i],b=y+dy[i]; if(a<1||a>n||b<1||b>n)continue; if(!st[a][b]){ dfs(a,b,num+1); } } } int main(){ cin>>n>>k>>x>>y; dfs(x,y,0); cout<<cnt; } 

Read more

深入解析Stable Diffusion基石——潜在扩散模型(LDMs)

深入解析Stable Diffusion基石——潜在扩散模型(LDMs)

一、技术解读:潜在扩散模型——高分辨率图像合成的范式革命 1.1 核心动机:破解“质量-效率-可控性”的不可能三角 在潜在扩散模型(Latent Diffusion Models, LDMs)出现之前,高分辨率图像生成领域长期存在一个“不可能三角”:生成质量、计算效率、可控性难以兼得。 * GANs:能快速生成高质量图像,但训练极其不稳定,易出现模式崩溃(多样性差),且实现复杂条件的可控生成需要为不同任务设计特定架构,工程化成本极高。 * VAEs:训练稳定、架构简单,但其优化目标过度依赖像素级损失+强正则化,导致生成图像模糊、细节丢失严重,无法满足高保真生成需求。 * 像素空间扩散模型(DMs):生成质量顶尖,并支持无需重新训练的灵活引导(如修复、上色、超分),但其在百万维度的像素空间中直接进行迭代去噪,导致训练成本(通常需数百个GPU天)和推理成本(生成一张图需数分钟)高昂,仅能在超算中心或大厂落地,

无人机 5.8G 模拟图传电路设计方案及性能分析

一、什么是 5.8G 模拟图传? 简单说,5.8G 模拟图传就是无人机的 “千里眼”,能把天上拍的画面实时传到地面。你在遥控器上看到的无人机视角,全靠它来实现。 为啥是 5.8G?因为这个频段干扰少,就像高速路上车少,信号跑起来更顺畅。而且模拟信号传输快,延迟低,特别适合 FPV 竞速这种需要快速反应的场景 —— 总不能无人机都撞墙了,你才在屏幕上看到障碍物吧? 二、工作原理:信号的 “旅行记” 2.1 信号采集:无人机的 “眼睛” 无人机上的摄像头就像手机相机,能把看到的景象变成电信号。但这时候的信号很弱,还带着 “杂音”,就像说话含着口水,听不清。 这时候会经过两步处理: * 过滤杂音:用低通滤波器 “过滤” 掉高频噪音,就像用滤网把水里的沙子去掉。 * 信号放大:放大器把信号变强,

Matlab报错找不到编译器?5分钟搞定MinGW-w64 C/C++环境配置(附环境变量设置)

Matlab报错找不到编译器?5分钟搞定MinGW-w64 C/C++环境配置(附环境变量设置) 最近在尝试用Matlab调用一些C/C++写的算法库,或者想编译一个别人分享的.mex文件时,是不是经常在命令行里敲下 mex -setup 后,迎面而来的就是一个冰冷的报错窗口?"未找到支持的编译器或 SDK"——这句话对很多刚接触Matlab混合编程的朋友来说,简直像一盆冷水。别担心,这几乎是每个Matlab用户进阶路上的必经之坎。问题的核心,往往不在于Matlab本身,而在于你的电脑缺少一个它认可的“翻译官”:C/C++编译器。对于Windows用户,官方推荐且免费的解决方案就是MinGW-w64。这篇文章,就是为你准备的从报错到成功配置的完整路线图。我们不只告诉你步骤,更会解释每一步背后的逻辑,并附上那些容易踩坑的细节和验证方法,目标是让你一次配置,终身受益。 1. 理解问题根源:为什么Matlab需要单独的编译器? 在深入操作之前,花几分钟搞清楚“为什么”,能帮你避免未来很多“是什么”的困惑。Matlab本身是一个强大的解释型语言环境,

基于FPGA机器视觉缺陷检测 实现铝片表面四种缺陷的检测 包含源码和端测文件 使用SSD-Mo...

基于FPGA机器视觉缺陷检测 实现铝片表面四种缺陷的检测 包含源码和端测文件 使用SSD-Mo...

基于FPGA机器视觉缺陷检测 实现铝片表面四种缺陷的检测 包含源码和端测文件 使用SSD-MobileNetV1模型,识别精度达到85%以上。 基于 FPGA 的金属表面缺陷检测系统 ——功能全景与技术流程深度解析 (核心代码脱敏版) ------------------------------------------------ 一、定位与目标 1. 业务痛点 铝带轧制现场对“零漏检、低过杀、实时性”有刚性需求;传统 AOI 无法在 1.1 fps@400×320 分辨率下同时保证 mAP≥85%。 2. 系统目标 在 Cyclone-V SoC FPGA 上实现“端到端”缺陷检测: - 检测类:划痕、辊印、脏污、针孔 4 类缺陷 -