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

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


前言

在这里插入图片描述


题解

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

最后一题是搜索+剪枝,还要注意整数溢出的问题。

在这里插入图片描述


RC-v1 另类单位圆

分值: 20分

思路: 模拟

全枚举即可, 时间复杂度为 O ( 1 0 8 ) O(10^8) O(108)

#include <bits/stdc++.h>using namespace std;int main() {int a, b;cin >> a >> b;int minV = (int)1e9;int minX = 0, minY = 0;int maxV = 0;int maxX = 0, maxY = 0;for (int i = a; i <= b; i++) {for (int j = a; j <= b; j++) {int v = abs(i * i - i * j - j * j);if (v != 1) continue;int ov = i + j;if (minV > ov) {minV = ov;minX = i; minY = j;}if (maxV < ov) {maxV = ov;maxX = i; maxY = j;}}}cout << "(" << minX << ", " << minY << ")\n";cout << "(" << maxX << ", " << maxY << ")\n";return 0;
}

RC-v2 含茶量

分值: 25分

思路: api调用题 + 模拟

  1. 归一化,把大写字符串统一为小写字符串
  2. 用暴力匹配字符串即可,不需要用kmp,z函数,因此chatgp固定且不长
#include <bits/stdc++.h>using namespace std;struct T {string k; int v;T(string k, int v) : k(k), v(v) {}
};int main() {string line;getline(cin, line);int n = atoi(line.c_str());vector<T> vec;map<string, int> hp;while (n-- > 0) {string name;getline(cin, name);getline(cin, line);for (size_t i = 0; i < line.size();i++) {if (line[i] >= 'A' && line[i] <= 'Z') {line[i] = line[i] - 'A' + 'a';}}int cnt = 0;int pos = 0;while ((pos = line.find("chatgpt", pos)) != string::npos) {pos += 7;cnt++;}if (cnt > 0) hp[name] += cnt;}for (auto &e: hp) vec.push_back(T(e.first, e.second));sort(vec.begin(), vec.end(), [](auto &a, auto &b) {if (a.v != b.v) return a.v > b.v;return a.k < b.k;});int limit = vec.size() > 3 ? 3 : vec.size();for (int i = 0; i < limit; i++) {cout << vec[i].k << " " << vec[i].v << "\n";}return 0;
}

RC-v3 软件窗体的层级管理

分值:25分

在这里插入图片描述

思路: 层序bfs

这题的关键点在于,树的节点个数n ( n ≤ 1000 n \le 1000 n1000), 因此,每次查询按该节点分层bfs即可。

时间复杂度为 O ( n ∗ q ) O(n*q) O(nq)

#include <bits/stdc++.h>using namespace std;void solve(vector<vector<int>> &g, int s) {// 层序遍历int ans = 0, ansLevel = 0;deque<int> que;que.push_back(s);int level = 0;while (!que.empty()) {int sz = que.size();// ans = max(ans, sz);level++;if (ans < sz) {ans = sz;ansLevel = level;}for (int i = 0; i < sz; i++) {int u = que.front(); que.pop_front();for (int v: g[u]) {que.push_back(v);}}}cout << ansLevel << " " << ans << "\n";
}int main() {int n, m;cin >> n >> m;vector<vector<int>> g(n);for (int i = 0; i < m; i++) {int id, k;cin >> id >> k;for (int j = 0; j < k; j++) {int next;cin >> next;g[id].push_back(next);}}int q;cin >> q;for (int i = 0; i < q; i++) {int u; cin >> u;solve(g, u);}return 0;
}

RC-v4 加号放哪里

分值: 30分

思路: 搜索+剪枝

为何贪心不行,比如从中间切割

举个特殊的例子

100000000000001

这种形态,显然中间切割不是最佳的

所以采用搜索,同时需要引入剪枝的策略,比如贪心获得一个近似解,加速搜索。

需要注意: 1 0 20 超过 i n t 64 范围 10^{20} 超过int64范围 1020超过int64范围

用uint64_t,或者__int128来规避这个问题


#include <bits/stdc++.h>using namespace std;using i128 = __int128;i128 convert(string s) {i128 r = 0;for (auto &c: s) {r = r * 10 + (c - '0');}return r;
}string i128string(i128 v) {string r;while (v > 0) {r.push_back((char)(v % 10 + '0'));v /= 10;}reverse(r.begin(), r.end());return r;
}const int inf = 0x3f3f3f3f;
int gAns = inf;
int gMin = 9;void dfs(int d, string s) {i128 v = convert(s);if (v < 10) {if (gAns > d) {gAns = d;gMin = v;} else if (gAns == d && gMin > v) {gMin = v;}return;}// cutoffif (gAns < d) return;int n = s.size();for (int i = 0; i < n - 1; i++) {i128 left = convert(s.substr(0, i+1));i128 right = convert(s.substr(i + 1));i128 v = left + right;dfs(d + 1, i128string(v));}
}int main() {string s;cin >> s;dfs(0, s);cout << gAns << " " << gMin << "\n";return 0;
}

写在最后

在这里插入图片描述

http://www.xdnf.cn/news/506845.html

相关文章:

  • Active Directory域环境信息收集实战指南
  • 摄影构图小节
  • [逆向工程]C++实现DLL注入:原理、实现与防御全解析(二十五)
  • Flowbite 和 daisyUI 那个好用?
  • AI Agent开发第69课-彻底消除RAG知识库幻觉(3)-手撕“重排序”
  • W5500使用ioLibrary库创建DNS客户端
  • 【人工智能】DeepSeek解码:揭秘AI大模型训练的创新密码
  • 从0到1:Python项目部署与运维全攻略(10/10)
  • 如何在Cursor中高效使用MCP协议
  • 桌面端进程通信
  • 第十一课 蜗牛爬树
  • 恢复因 oh-my-zsh 安装导致丢失的 zsh 环境变量
  • 【Docker 新手入门指南】第五章:Hello Word
  • JavaScript运算符
  • 人工智能-自然语言与语音产品实现
  • SpringBoot--自动配置原理详解
  • 2025.05.17淘天机考笔试真题第二题
  • vue使用axios实现拦截器
  • 体育比分数据服务避坑指南
  • 信息与信息化
  • 【高斯函数拟合】高斯-牛顿法与梯度下降法的 Python 实现
  • Python集合运算:从基础到进阶全解析
  • 无线信道的噪声与干扰
  • 长三角、珠三角、成渝、京津冀四大城市群的区域与分布
  • 生产者 - 消费者模式实现方法整理
  • Ubuntu 添加系统调用
  • 给你的matplotlib images添加scale Bar
  • Python 3.11详细安装步骤(包含安装包)Python 3.11详细图文安装教程
  • 学习深度学习是否要先学习机器学习?
  • C语言| 指针变量的定义