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.pswp.cn/bicheng/81274.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/81274.shtml
英文地址,請注明出處:http://en.pswp.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…