2022 RoboCom 世界机器人开发者大赛(睿抗 caip) -高职组(国赛)解题报告 | 科学家
前言
题解
2022 RoboCom 世界机器人开发者大赛(睿抗 caip) -高职组(国赛)。
最后一题还考验能力,需要找到合适的剪枝。
RC-v1 智能管家
分值: 20分
签到题,map的简单实用
#include <bits/stdc++.h>using namespace std;int main() {int n, m;ios::sync_with_stdio(false);cin.tie(nullptr); cout.tie(nullptr);cin >>n >> m;vector<int> hp(n + 1);for (int i = 0; i < n; i++) {int id; cin >> id;hp[i + 1] = id;} int q;cin >> q;while (q-- > 0) {map<int, int> cnt;int w;while ( cin >> w && w > 0) {cnt[hp[w]]++;}bool f = false;for (auto &e: cnt) {if (f) cout << " ";f = true;cout << "B" << e.first << "-" << e.second;}cout << "\n";}return 0;
}
RC-v2 智能陪护
分值: 25分
具体可查看
RC-v2 智能陪护 争议解读
#include <bits/stdc++.h>using namespace std;struct T {string name;int op;string at;T(string name, int op, string at): name(name), op(op), at(at) {}
};int main() {int n, m;cin >> n >> m;deque<string> man;deque<string> robot;for (int i = 1; i <= n; i++) robot.push_back(to_string(i));vector<T> seq;for (int i = 0; i < m; i++) {string name, at;int op;cin >> name >> op >> at;seq.push_back(T(name, op, at));}sort(seq.begin(), seq.end(), [](auto &a, auto &b) {if (a.at != b.at) return a.at < b.at;if (a.op != b.op) return a.op < b.op;return a.name < b.name;});int idx = 0;map<string, int> hp;int ptr = 0;vector<array<string, 2>> res;for (auto &e: seq) { if (e.op == 1) {hp[e.name] = idx++;if (robot.empty()) {res.push_back({e.name, ""});}else {string v = robot.front(); robot.pop_front();res.push_back({e.name, v});cout << e.name << " - " << v << "\n";}} else { int pos = hp[e.name];string v = res[pos][1];if (v == "") {// passres[pos][1] = "NONE";cout << res[pos][0] << " - " << "NONE" << "\n";} else {robot.push_back(v);while (!robot.empty() && ptr < res.size()) {if (res[ptr][1] != "") {ptr++;} else {string v = robot.front(); robot.pop_front();res[ptr][1] = v;cout << res[ptr][0] << " - " << v << "\n";ptr++;}}}}} while (!robot.empty()) {string v = robot.front(); robot.pop_front();cout << v;cout << " \n"[robot.empty()];}return 0;
}
RC-v3 智能护理中心统计
分值:25分
考察点: 建树(指向父节点+子节点)
因为关系链最多m( m ≤ 10 5 m\le 10^5 m≤105), 操作次数 10 2 10^2 102, 因此每次操作全量遍历即可,整个时间复杂度最多 10 7 10^7 107
#include <bits/stdc++.h>using namespace std;struct Node {int v = 0;string fa = "";set<string> childs;Node() {}Node(int v) : v(v) {}
};map<string, Node> mp;bool isNum(const string &v) {return v[0] >= '0' && v[0] <= '9';
}int dfs(const string &u) {int res = mp[u].v;for (const string &v: mp[u].childs) {res += dfs(v);}return res;
}int main() {ios::sync_with_stdio(false);cin.tie(nullptr); cout.tie(nullptr);int n, m;cin >> n >> m;for (int i = 0; i < m; i++) {string u, v;cin >> u >> v;if (!mp.count(u)) {mp[u] = Node(isNum(u)?1:0);}if (!mp.count(v)) {mp[v] = Node(0);}mp[v].childs.insert(u);mp[u].fa = v;}// 处理操作string op;while (cin >> op && op != "E") {if (op == "T") {string u, v;cin >> u >> v;if (!mp.count(v)) {mp[v] = Node(0);}if (!mp.count(u)) {mp[u] = Node(1);}if (!mp[u].fa.empty()) {mp[mp[u].fa].childs.erase(u);} mp[v].childs.insert(u);mp[u].fa = v;} else {string u;cin >> u;if (mp.count(u) == 0) cout << (isNum(u) ? 1 : 0) << "\n";else {cout << dfs(u) << "\n";}}}return 0;
}
RC-v4 情人节的蜜语
分值: 30分
思路: dfs + 剪枝
说白了在n*m的矩阵中,寻找长度为p的模式, n , m ≤ 100 , p ≤ 20 n,m\le 100, p \le 20 n,m≤100,p≤20
纯dfs搜索的话,拿不到满分,大概是25/30的样子。
那这边就需要考虑如何优化的问题了。
引入类似布隆过滤器的机制 引入类似 布隆过滤器的机制 引入类似布隆过滤器的机制
引入 c a n [ i ] [ x ] [ y ] , 表示第 i 匹配, x y 坐标开始可能性,这个 c a n 不追求去重 can[i][x][y], 表示第i匹配,xy坐标开始可能性,这个can不追求去重 can[i][x][y],表示第i匹配,xy坐标开始可能性,这个can不追求去重
如何理解这个不去重呢?
- 如果can为true,精确结果不保证一定为true
- 如果can为false,最终结果一定为false
这就是所谓的 False Positive
这个预处理后,在dfs优化,可以大大减低搜索量,就能30/30。
#include <bits/stdc++.h>
using namespace std;int m, n, L;
vector<string> grid;
string target;
// can[i][x][y]: 从 (x,y) 匹配到 target[i] 起,能否完成剩余匹配
bool can_[21][100][100];
bool vis[100][100];
vector<pair<int,int>> path;
int dx[8]={-1,-1,-1,0,0,1,1,1}, dy[8]={-1,0,1,-1,1,-1,0,1};
bool found=false;// 剪枝后的 DFS
void dfs(int x, int y, int idx){if(found) return;path.emplace_back(x,y);if(idx+1 == L){found = true;return;}vis[x][y] = true;for(int d=0; d<8; d++){int nx = x+dx[d], ny = y+dy[d];if(nx<0||nx>=m||ny<0||ny>=n) continue;if(vis[nx][ny]) continue;if(grid[nx][ny] != target[idx+1]) continue;if(!can_[idx+1][nx][ny]) continue; // 剪掉不可能完成的dfs(nx, ny, idx+1);if(found) break;}if(!found){vis[x][y]=false;path.pop_back();}
}int main(){ios::sync_with_stdio(false);cin.tie(nullptr);cin >> m >> n;grid.resize(m);for(int i=0;i<m;i++) cin >> grid[i];cin >> target;L = target.size();// 1) 后向可达性 DPmemset(can_, 0, sizeof(can_));// 最后一层for(int x=0;x<m;x++){for(int y=0;y<n;y++){if(grid[x][y] == target[L-1])can_[L-1][x][y] = true;}}// 反向递推for(int i=L-2; i>=0; i--){for(int x=0;x<m;x++){for(int y=0;y<n;y++){if(grid[x][y] != target[i]) continue;for(int d=0; d<8; d++){int nx=x+dx[d], ny=y+dy[d];if(nx<0||nx>=m||ny<0||ny>=n) continue;if(can_[i+1][nx][ny]){can_[i][x][y] = true;break;}}}}}// 2) 从可达的起点开始 DFSfor(int x=0; x<m && !found; x++){for(int y=0; y<n && !found; y++){if(grid[x][y]==target[0] && can_[0][x][y]){dfs(x,y,0);}}}// 输出vector<string> out(m, string(n,'.'));for(auto &p: path){out[p.first][p.second] = grid[p.first][p.second];}for(int i=0;i<m;i++){cout << out[i] << "\n";}return 0;
}
写在最后
相关文章:

2022 RoboCom 世界机器人开发者大赛(睿抗 caip) -高职组(国赛)解题报告 | 科学家
前言 题解 2022 RoboCom 世界机器人开发者大赛(睿抗 caip) -高职组(国赛)。 最后一题还考验能力,需要找到合适的剪枝。 RC-v1 智能管家 分值: 20分 签到题,map的简单实用 #include <bits/stdc.h>using namespace std;int…...
WIN11 Docker Desktop 安装问题解决
windows version 打开windows 命令行,执行 ver显示 Microsoft Windows [版本 10.0.26100.4061]安装docker desktop 后,启动出问题,可以按下面步骤解决 安装 virtual machine plateform 开始 —》 控制面板 ----》程序 ----》启动或关闭w…...
网站服务器出现异常的原因是什么?
网站时企业和个人用户进行提供信息和服务的重要平台,随着时间的推移,网站服务器出现异常情况也是常见的问题之一,这可能会导致网站无法正常访问或者是运行缓慢,会严重影响到用户的体验感,本文就来介绍一下网站服务器出…...
Python实例题:Python3实现图片转彩色字符
目录 Python实例题 题目 代码实现 实现原理 图像预处理: 灰度值计算: 字符映射: 彩色输出: 关键代码解析 1. 字符映射和灰度计算 2. 图像模式输出 3. 命令行参数处理 使用说明 基本用法(终端输出&#x…...
同一机器下通过HTTP域名访问其他服务器进程返回504问题记录
我这边项目的服务器有好几个类型节点,每个节点为一个进程,不同节点间通过HTTP来通讯,当前这几个类型的节点都部署在同一台机器上,然后我再测试某个节点到另一个节点的http通讯时,发现一个奇怪的现象: 1. 我…...

基于物联网(IoT)的电动汽车(EVs)智能诊断
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从&#x…...

JDBC+HTML+AJAX实现登陆和单表的CRUD
JDBCHTMLAJAX实现登陆和单表的CRUD 导入maven依赖 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocatio…...
Leetcode 3568. Minimum Moves to Clean the Classroom
Leetcode 3568. Minimum Moves to Clean the Classroom 1. 解题思路2. 代码实现 题目链接:3568. Minimum Moves to Clean the Classroom 1. 解题思路 这一题我的核心思路就是广度优先遍历遍历剪枝。 显然,我们可以给出一个广度优先遍历来给出所有可能…...
Kafka多线程Consumer
Apache Kafka作为一款分布式流处理平台,以其高吞吐量和可扩展性在大数据处理领域占据了重要地位。在实际应用中,为了提升数据处理的效率和灵活性,我们常常需要采用多线程的方式来消费Kafka中的数据。本文将通过一个案例分析,详细探…...
从零开始的git学习
基本概念:修改记录 1、每个修改记录都有对应的id 2、当发现修改有问题时,可以进行回滚操作。 3、回滚的本质是一次新的更新以复原修改。但是如果不是针对最新记录进行回滚,会出现冲突。 这里需要举例说明 基本概念:分支 1、分支…...

【C++】位图详解(一文彻底搞懂位图的使用方法与底层原理)
🌈 个人主页:谁在夜里看海. 🔥 个人专栏:《C系列》《Linux系列》 ⛰️ 天高地阔,欲往观之。 目录 1.位图的概念 2.位图的使用方法 定义与创建 设置和清除 位访问和检查 转换为其他格式 3.位图的使用场景 1.快速…...
Spring Boot 整合 JdbcTemplate,JdbcTemplate 与 MyBatis 的区别
DAY29.1 Java核心基础 Spring Boot 整合 JdbcTemplate JdbcTemplate是一个轻量级JDBC封装的组件 JdbcTemplate 是 Spring 自带的JDBC的封装,和Mybatis类似,需要自己封装sql语句 JdbcTemplate 帮助我们来连接数据库,SQL的执行,…...
sass基础语法
Sass(Syntactically Awesome Style Sheets)是一种 CSS 预处理器,提供了比原生 CSS 更强大、更灵活的语法功能。它有两种语法格式: Sass(缩进语法,.sass 文件)SCSS(CSS-like 语法&am…...
【EF Core】 EF Core 批量操作的进化之路——从传统变更跟踪到无跟踪更新
文章目录 前言一、批量操作(Rang)1.1 AddRange()1.2 UpdateRange()1.3 AttachRange()1.4 RemoveRange() 二、Range操作的底层优化2.1 EF Core 7 前举步维艰2.2 EF Core 7后焕然一新 三、无跟踪的批量更新与删除3.1 ExecuteUpdate3.2 ExecuteDelete3.3 状…...
[Go] Option选项设计模式 — — 编程方式基础入门
[Go] Option选项设计模式 — — 编程方式基础入门 全部代码地址,欢迎⭐️ Github:https://github.com/ziyifast/ziyifast-code_instruction/tree/main/go-demo/go-option 1 介绍 在 Go 开发中,我们经常遇到需要处理多参数配置的场景。传统方…...
Vue 项目命名规范指南
📚 Vue 项目命名规范指南(适用于 Vue 3 Pinia Vue Router) 目的:统一命名风格,提升可读性、可维护性和团队协作效率。 一、通用原则 类型命名风格示例变量camelCaseuserName, isLoading常量UPPER_SNAKE_CASEMAX_RET…...

【笔记】开源通用人工智能代理 Suna 部署全流程准备清单(Windows 系统)
#工作记录 一、基础工具与环境 开发工具 Git 或 GitHub Desktop(代码管理)Docker Desktop(需启用 WSL2,容器化部署)Python 3.11(推荐版本,需添加到系统环境变量)Node.js LTS…...

海康工业相机SDK二次开发(VS+QT+海康SDK+C++)
前言 工业相机在现代制造和工业自动化中扮演了至关重要的角色,尤其是在高精度、高速度检测中。海康威视工业相机以其性能稳定、图像质量高、兼容性强而受到广泛青睐。特别是搞机器视觉的小伙伴们跟海康打交道肯定不在少数,笔者在平常项目中跟海康相关人…...
前端面试准备-5
1.Node.js中的process.nectTick()有什么作用 将一个回调函数插入到当前执行栈的尾部,在下一次事件轮询之前调用这个回调函数 2.什么是Node.js中的事件发射器,作用是什么,如何使用 提供一种机制,可以创建、触发和监听自定义事件…...
Spring Boot 启动流程深度解析:从源码到实践
Spring Boot 启动流程深度解析:从源码到实践 Spring Boot 作为 Java 开发的主流框架,其 “约定大于配置” 的理念极大提升了开发效率。本文将从源码层面深入解析 Spring Boot 的启动流程,并通过代码示例展示其工作机制。 一、Spring Boot 启…...

深度学习|pytorch基本运算-乘除法和幂运算
【1】引言 前序学习进程中,已经对pytorch张量数据的生成和广播做了详细探究,文章链接为: 深度学习|pytorch基本运算-CSDN博客 深度学习|pytorch基本运算-广播失效-CSDN博客 上述探索的内容还止步于张量的加减法,在此基础上&am…...
嵌入式通用集成电路卡市场潜力报告:物联网浪潮下的机遇与挑战剖析
一、嵌入式通用集成电路卡概述 嵌入式通用集成电路卡(Embedded Universal Integrated Circuit Card,简称 eUICC),是一种将传统 SIM 卡功能直接嵌入到设备主板上的芯片解决方案 。与传统可插拔式 SIM 卡不同,eUICC 采…...

4.2.4 Spark SQL 数据写入模式
在本节实战中,我们详细探讨了Spark SQL中数据写入的四种模式:ErrorIfExists、Append、Overwrite和Ignore。通过具体案例,我们演示了如何使用mode()方法结合SaveMode枚举类来控制数据写入行为。我们首先读取了一个JSON文件生成DataFrame&#…...

论文笔记: Urban Region Embedding via Multi-View Contrastive Prediction
AAAI 2024 1 INTRO 之前基于多视图的region embedding工作大多遵循相同的模式 单独的单视图表示多视图融合 但这种方法存在明显的局限性:忽略了不同视图之间的信息一致性 一个区域的多个视图所携带的信息是高度相关的,因此它们的表示应该是一致的如果能…...
Android 缓存应用冻结器(Cached Apps Freezer)
一、核心功能与原理 1. 功能概述 目标:通过冻结后台缓存应用的进程,减少其对 CPU、内存等系统资源的消耗,优化设备性能与续航。适用场景:针对行为不当的后台应用(如后台偷偷运行代码、占用 CPU)ÿ…...

初学者如何微调大模型?从0到1详解
本文将手把手带你从0到1,详细解析初学者如何微调大模型,让你也能驾驭这些强大的AI工具。 1. 什么是大模型微调? 想象一下,预训练大模型就像一位博览群书但缺乏专业知识的通才。它掌握了海量的通用知识,但可能无法完美…...

西瓜书第十一章——降维与度量学习
文章目录 降维与度量学习k近邻学习原理头歌实战-numpy实现KNNsklearn实现KNN 降维——多维缩放(Multidimensional Scaling, MDS,MDS)提出背景与原理重述1.**提出背景**2.**数学建模与原理推导**3.**关键推导步骤** Principal Component Analy…...

Portainer安装指南:多节点监控的docker管理面板-家庭云计算专家
背景 Portainer 是一个轻量级且功能强大的容器管理面板,专为 Docker 和 Kubernetes 环境设计。它通过直观的 Web 界面简化了容器的部署、管理和监控,即使是非技术用户也能轻松上手。Portainer 支持多节点管理,允许用户从一个中央控制台管理多…...
NanoGPT的BenchMarking.py
1.Benchmarking是一种评估和比较性能的过程。在深度学习领域,它通常涉及对模型的训练速度、推理速度、内存占用等指标进行测量,以便评估不同模型、不同硬件配置或者不同软件版本之间的性能差异。 例如,当你尝试比较两个不同架构的模型&#x…...
测试用例及黑盒测试方法
一、测试用例 1.1 基本要素 测试用例(Test Case)是为了实施测试而向被测试的系统提供的一组集合,这组集合包含:测试环境、操作步骤、测试数据、预期结果等4个主要要素。 1.1.1 测试环境 定义:测试执行所需的软硬件…...