2024 睿抗机器人开发者大赛CAIP-编程技能赛-本科组(国赛) 解题报告 | 珂学家


前言

在这里插入图片描述


题解

2024 睿抗机器人开发者大赛CAIP-编程技能赛-本科组(国赛)。

国赛比省赛难一些,做得汗流浃背,T_T.

在这里插入图片描述


RC-u1 大家一起查作弊

分值: 15分

这题真的太有意思,看看描述

在今年的睿抗比赛上,有同学的提交代码如下:

public void asfiasfgwef12() {int tsadflas=3;int masf11233=2;int[]wasdf1213= new int[10 +1];int[] vasf124l = new int[10 + I];int[][] ddasf1234p= new int[masf11233

你肯定很奇怪,这看上去代码似乎不像是正常写出来的代码呀?没错,这是这位同学在网络上购买了所谓的“保研综测套餐”,商家为逃避赛后查重,给这位同学发去了经过混淆的代码。然而经过技术支持方的努力,这位同学不仅被封禁,与 TA 购买了相同“套餐”的同学也利用技术手段全部查出,目前主办方已向警方报案,这些同学的“保研”梦很有可能会转变为“案底”梦……因此如果你在比赛前也购买了类似的服务,现在迷途知返还来得及——毕竟这个商家起码还做了一些努力,许多商家号称“一对一”,实际上将一份代码发给了数十位同学……

题外话,这个混淆方式是不是挺眼熟。

言归正传,这题已经构建一个模型,只要按要求编写即可,模拟。

#include <bits/stdc++.h>using namespace std;int judge(char c) {if (c >= 'a' && c <= 'z') return 1;else if (c >= 'A' && c <= 'Z') return 2;else if (c >= '0' && c <= '9') return 4;return 0;
}int main() {int score = 0;int tot = 0, cnt = 0;string line;while (getline(cin, line)) {int i = 0;int n = line.size();while (i < n) {if (judge(line[i]) == 0) {i++;continue;}int j = i + 1;while (j < n && judge(line[j]) != 0) {j++;}int mask = 0;for (int t = i; t < j; t++) {mask |= judge(line[t]);}if (mask == 7) {score += 5;} else if (mask == 6 || mask == 5) {score += 3;} else if (mask == 3) {score += 1;}cnt++;tot += (j - i); i = j;}}cout << score << '\n';cout << tot << " " << cnt << '\n';return 0;
}

RC-u2 谁进线下了?II

分值: 20分

题型: 阅读理解 + 模拟

需要注意:

  1. 不要输出未参赛的队伍分数
#include <bits/stdc++.h>using namespace std;int tabs[] = {0, 25, 21, 18, 16, 15, 14, 13, 12, 11, 10,9, 8, 7, 6, 5, 4, 3, 2, 1, 0};int main() {int t;cin >> t;vector<int> vis(30);vector<int> scores(30);while (t-- > 0) {for (int i = 0; i < 20; i++) {int c, r;cin >> c >> r;scores[c - 1] += tabs[r];vis[c - 1] = 1;}}vector<array<int, 2>> arr;for (int i = 0; i < 30; i++) {arr.push_back({i, scores[i]});}sort(arr.begin(), arr.end(), [](auto &a, auto &b) {if (a[1] != b[1]) return a[1] > b[1];return a[0] < b[0];});int m = arr.size();for (int i = 0; i < m;i++) {if (vis[arr[i][0]] == 1) {cout << (arr[i][0] + 1) << " " << arr[i][1] << '\n';}}return 0;
}

RC-u3 势均力敌

分值: 25 分

思路: 枚举 + 折半查找(meet in middle)

利用 c++自带的permutation函数簇,生成所有的排列

当n=4时,排列最多为24个

此时有常规的思路,0-1背包,但值域太大的

考虑到24个,可以运用位运算枚举,然后折半加速

#include <bits/stdc++.h>using namespace std;struct K {int64_t k;int v;bool operator<(const K&lhs) const {if (k != lhs.k) return k < lhs.k;return v < lhs.v;}
};int main() {int n;cin >> n;vector<int> arr(n);for (int& x: arr) cin >> x;sort(arr.begin(), arr.end());int64_t sum = 0;vector<int> vals;do {int w = 0;for (auto &v: arr) w = w * 10 + v;vals.push_back(w);sum += (int64_t)w * w;} while(next_permutation(arr.begin(), arr.end()));if (sum % 2 == 1) {return 0;}// meet in middle 的枚举技巧int cnt = vals.size() / 2;int mask = 1 << cnt;map<K, int> hp;for (int i = 0; i < mask; i++) {int64_t tsum = 0, z = 0;for (int j = 0; j < cnt; j++) {if ((i & (1 << j)) != 0) {tsum += (int64_t)vals[j+cnt] * vals[j + cnt];z ++;}}hp[K(tsum, z)] = i;}int ans1 = -1, ans2 = -1;for (int i = 0; i < mask; i++) {int64_t tsum = 0, z = 0;for (int j = 0; j < cnt; j++) {if ((i & (1 << j)) != 0) {tsum += (int64_t)vals[j] * vals[j];z ++;}}if (hp.find(K(sum/2 - tsum, cnt - z)) != hp.end()) {ans1 = i;ans2 = hp[K(sum/2 - tsum, cnt - z)];break;}}for (int i = 0; i < cnt; i++) {if ((ans1 & (1 << i)) != 0) {cout << vals[i] << '\n';}}for (int i = 0; i < cnt; i++) {if ((ans2 & (1 << i)) != 0) {cout << vals[i + cnt] << '\n';}}return 0;
}

RC-u4 City 不 City

分值: 30分

题型: 图论

其实就是变形版的Dijkstra,权值为(最短路径, 最小热度)

这边采用二分最小热度 + 最短路径验证

#include <bits/stdc++.h>using namespace std;struct K {int cost, idx;bool operator<(const K &lhr) const {return cost > lhr.cost;}
};int main() {int n, m, s, e;cin >> n >> m >> s >> e;s--; e--;vector<int> arr(n);for (int &x: arr) cin >> x;vector<vector<array<int, 2>>> g(n);for (int i = 0; i < m; i++) {int u, v, w;cin >> u >> v >> w;u--; v--;g[u].push_back({v, w});g[v].push_back({u, w});}// 引入二分算了int inf = 0x3f3f3f3f;function<int(int)> solve = [&](int limit) {vector<int> dp(n, inf);dp[s] = 0;priority_queue<K, vector<K>> pq;pq.push(K(0, s));while (!pq.empty()) {K cur = pq.top(); pq.pop();if (dp[cur.idx] < cur.cost) continue;if (cur.idx != s && arr[cur.idx] > limit) continue;for (auto &e: g[cur.idx]) {if (dp[e[0]] > cur.cost + e[1]) {dp[e[0]] = cur.cost + e[1];pq.push(K(dp[e[0]], e[0]));}}}return dp[e];};int base = solve(inf);if (base == inf) {cout << "Impossible\n"; } else {int l = 0, r = inf;while (l <= r) {int mid = l + (r - l) / 2;int ret = solve(mid);if (ret == base) {r = mid - 1;} else {l = mid + 1;}}cout << base << " " << l << "\n";}return 0;
}

RC-u5 贪心消消乐

分值: 30分

思路: 前缀和+最大子数组和问题转化

不过我觉得这题,

在消除格子后,上面的物体下滑规则没有述说清晰

这时间复杂度,其实我把控不住了,每次贪心获取最大子矩阵的和,已经优化到 O ( n 3 ) O(n^3) O(n3)

剩下的就是操作的次数了,感觉还是数据弱了

#include <bits/stdc++.h>using namespace std;const int64_t inf = 0x3f3f3f3f;
int solve(vector<vector<int>> &g, vector<int> &choice) {int n = g.size();// n * nvector<vector<int64_t>> pre(n + 1, vector<int64_t>(n + 1, 0));for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {pre[i + 1][j + 1] = pre[i + 1][j] + pre[i][j + 1] - pre[i][j];if (g[i][j] == 0) pre[i + 1][j + 1] += -inf * 2;else pre[i + 1][j + 1] += g[i][j];}}int64_t ansW = 0;// O(n^3)for (int j = 0; j < n; j++) {for (int k = 0; k <= j; k++) {int64_t acc = 0;int up = 0;for (int i = 0; i < n; i++) {int64_t d = pre[i+1][j+1] - pre[i+1][k] - pre[i][j+1] + pre[i][k];acc += d;if (acc < 0) {acc = 0;up = i + 1;continue;}vector<int> tmp = {k+1, up + 1, j+1, i+1};if (acc > ansW) {ansW = acc;choice = {k+1, up + 1, j+1, i+1};} else if (acc == ansW && tmp < choice) {choice = {k+1, up+1, j+1, i+1};}}}}return ansW;
}void fall(vector<vector<int>> &g, vector<int> &choice) {int n = g.size();for (int i = choice[1] - 1; i <= choice[3] - 1; i++) {for (int j = choice[0] - 1; j <= choice[2] -1 ; j++) {g[i][j] = 0;}}  int h = choice[3] - choice[1] + 1;for (int i = choice[1] - 2; i >= 0; i--) {for (int j = choice[0] - 1; j <= choice[2] -1 ; j++) {g[i + h][j] = g[i][j];g[i][j] = 0;}}
}int main() {ios::sync_with_stdio(false);cin.tie(nullptr); cout.tie(nullptr);int n;cin >> n;vector<vector<int>> g(n, vector<int>(n));for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {cin >> g[i][j];}}int64_t acc = 0;while (true) {vector<int> choice;int64_t ans = solve(g, choice);if (ans == 0) {break;}cout << "(" << choice[0] << ", " << choice[1] << ") (" << choice[2] << ", " << choice[3] << ") " << ans << '\n';acc += ans;fall(g, choice);}cout << acc << '\n';return 0;
}

写在最后

在这里插入图片描述

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

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

相关文章

hghac和hgproxy版本升级相关操作和注意事项

文章目录 环境文档用途详细信息 环境 系统平台&#xff1a;N/A 版本&#xff1a;4.5.6,4.5.7,4.5.8 文档用途 本文档用于高可用集群环境中hghac组件和hgproxy组件替换和升级操作 详细信息 1.关闭服务 所有数据节点都执行 1、关闭hgproxy服务 [roothgdb01 tools]# system…

userfaultfd内核线程D状态问题排查

问题现象 运维反应机器上出现了很多D状态进程&#xff0c;也kill不掉,然后将现场保留下来进行排查。 排查过程 都是内核线程&#xff0c;先看下内核栈D在哪了&#xff0c;发现D在了userfaultfd的pagefault流程。 uffd知识补充 uffd探究 uffd在firecracker与e2b的架构下使…

深入解析:构建高性能异步HTTP客户端的工程实践

一、架构设计原理与核心优势 HTTP/2多路复用技术的本质是通过单一的TCP连接并行处理多个请求/响应流&#xff0c;突破了HTTP/1.1的队头阻塞限制。在异步编程模型下&#xff0c;这种特性与事件循环机制完美结合&#xff0c;形成了高性能网络通信的黄金组合。相较于传统同步客户…

根据台账批量制作个人表

1. 前期材料准备 1&#xff09;要有 人员总的信息台账 2&#xff09;要有 个人明白卡模板 2. 开始操作 1&#xff09;打开 人员总的信息台账&#xff0c;选择所需要的数据模块&#xff1b; 2&#xff09;点击插入&#xff0c;选择数据透视表&#xff0c;按流程操作&…

《AI大模型应知应会100篇》第65篇:基于大模型的文档问答系统实现

第65篇&#xff1a;基于大模型的文档问答系统实现 &#x1f4da; 摘要&#xff1a;本文详解如何构建一个基于大语言模型&#xff08;LLM&#xff09;的文档问答系统&#xff0c;支持用户上传 PDF 或 Word 文档&#xff0c;并根据其内容进行智能问答。从文档解析、向量化、存储到…

RTK哪个品牌好?2025年RTK主流品牌深度解析

在测绘领域&#xff0c;RTK 技术的发展日新月异&#xff0c;选择一款性能卓越、稳定可靠的 RTK 设备至关重要。2025 年&#xff0c;市场上涌现出众多优秀品牌&#xff0c;本文将深入解析几大主流品牌的核心竞争力。 华测导航&#xff08;CHCNAV&#xff09;&#xff1a;技术创…

SpringCloud微服务开发与实战

本节内容带你认识什么是微服务的特点&#xff0c;微服务的拆分&#xff0c;会使用Nacos实现服务治理&#xff0c;会使用OpenFeign实现远程调用&#xff08;通过黑马商城来带你了解实际开发中微服务项目&#xff09; 前言&#xff1a;从谷歌搜索指数来看&#xff0c;国内从自201…

pgsql14自动创建表分区

最近有pgsql的分区表功能需求&#xff0c;没想到都2025年了&#xff0c;pgsql和mysql还是没有自身支持自动创建分区表的功能 现在pgsql数据库层面还是只能用老三样的办法来处理这个问题&#xff0c;每个方法各有优劣 1. 触发器 这是最传统的方法&#xff0c;通过创建一个触发…

math toolkit for real-time development读书笔记一三角函数快速计算(1)

一、基础知识 根据高中知识我们知道&#xff0c;很多函数都可以用泰勒级数展开。正余弦泰勒级数展开如下&#xff1a; 将其进一步抽象为公式可知&#xff1a; 正弦和余弦的泰勒级数具有高度结构化的模式&#xff0c;可拆解为以下核心特征&#xff1a; 1. 符号交替特性 正弦级…

uni-app 中适配 App 平台

文章目录 前言✅ 1. App 使用的 Runtime 架构&#xff1a;**WebView 原生容器&#xff08;plus runtime&#xff09;**&#x1f4cc; 技术栈核心&#xff1a; ✅ 2. WebView Native 的通信机制详解&#xff08;JSBridge&#xff09;&#x1f4e4; Web → Native 调用&#xf…

SpringBoot基础(静态资源导入)

静态资源导入 在WebMvcAutoConfiguration自动配置类中 有一个添加资源的方法&#xff1a; public void addResourceHandlers(ResourceHandlerRegistry registry) { //如果静态资源已经被自定义了&#xff0c;则直接生效if (!this.resourceProperties.isAddMappings()) {logg…

基于OpenCV的人脸识别:LBPH算法

文章目录 引言一、概述二、代码实现1. 代码整体结构2. 导入库解析3. 训练数据准备4. 标签系统5. 待识别图像加载6. LBPH识别器创建7. 模型训练8. 预测执行9. 结果输出 三、 LBPH算法原理解析四、关键点解析五、改进方向总结 引言 人脸识别是计算机视觉领域的一个重要应用&…

ElasticSearch重启之后shard未分配问题的解决

以下是Elasticsearch重启后分片未分配问题的完整解决方案&#xff0c;结合典型故障场景与最新实践&#xff1a; 一、快速诊断定位 ‌检查集群状态 GET /_cluster/health?pretty # status为red/yellow时需关注unassigned_shards字段值 ‌ 2.查看未分配分片详情 …

CSS- 3.1 盒子模型-块级元素、行内元素、行内块级元素和display属性

本系列可作为前端学习系列的笔记&#xff0c;代码的运行环境是在HBuilder中&#xff0c;小编会将代码复制下来&#xff0c;大家复制下来就可以练习了&#xff0c;方便大家学习。 HTML系列文章 已经收录在前端专栏&#xff0c;有需要的宝宝们可以点击前端专栏查看&#xff01; 点…

Git/GitLab日常使用的命令指南来了!

在 GitLab 中拉取并合并代码的常见流程是通过 Git 命令来完成的。以下是一个标准的 Git 工作流&#xff0c;适用于从远程仓库&#xff08;如 GitLab&#xff09;拉取代码、切换分支、合并更新等操作。 &#x1f310; 一、基础命令&#xff1a;拉取最新代码 # 拉取远程仓库的所…

HTML 表格与div深度解析区别及常见误区

一、HTML<div>元素详解 <div>是HTML中最基本的块级容器元素&#xff0c;本身没有语义&#xff0c;主要用于组织和布局页面内容。以下是其核心用法&#xff1a; 1. 基础结构与特性 <div><!-内部可包含任意HTML元素 --><h2>标题</h2><p…

mybatisPlus 新增时 其他字段的值和 id 保持一致实现方法

MyBatis-Plus 实现 sp_id_path 与 id 同步的方案 要实现新增时 sp_id_path 自动与 id 保持一致&#xff0c;需要在实体类和插入逻辑中做相应处理。MyBatis-Plus 提供了几种方式来实现这一需求&#xff1a; 方案一&#xff1a;使用 MyBatis-Plus 的自动填充功能 这是最优雅的…

兰亭妙微设计:为生命科技赋予人性化的交互语言

在医疗科技日新月异的今天&#xff0c;卓越的硬件性能唯有匹配恰如其分的交互语言&#xff0c;方能真正发挥价值。作为专注于医疗UI/UX设计的专业团队&#xff0c;兰亭妙微设计&#xff08;www.lanlanwork.com&#xff09;始终相信&#xff1a;每一处像素的排布&#xff0c;都应…

Tcping详细使用教程

Tcping详细使用教程 下载地址 https://download.elifulkerson.com/files/tcping/0.39/在windows环境下安装tcping 在以上的下载地中找到exe可执行文件&#xff0c;其中tcping.exe适用于32位Windows系统&#xff0c;tcping64.exe适用于64位Windows操作系统。 其实tcping是个…

springCloud/Alibaba常用中间件之Seata分布式事务

文章目录 SpringCloud Alibaba:依赖版本补充Seata处理分布式事务(AT模式)AT模式介绍核心组件介绍AT的工作流程&#xff1a;两阶段提交&#xff08;**2PC**&#xff09; Seata-AT模式使用Seata(2.0.0)下载、配置和启动Seata案例实战前置代码添加全局注解 GlobalTransactional Sp…