2025 年中國大學生程序設計競賽全國邀請賽(鄭州)暨第七屆CCPC河南省大學生程序設計競賽(補題)

文章目錄

  • 前言
  • F、幻形之路
  • G、直徑與最大獨立集
  • H,樹論函數
  • M, 川陀航空學院
  • 總結


前言

本次比賽,只能說太多沒接觸的知識了,還有太容易被題面嚇住。


F、幻形之路

題目鏈接:幻形之路
在這里插入圖片描述
解題思路:
對于這一題只需要,分別從起點和終點找到不經過障礙的點,然后在從當前點集,利用BFS找最短距離。
在這里插入圖片描述
代碼如下:

#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0) 
#define ll long long
#define endl '\n'const int N = 1010;  
const int INF = 0x3f3f3f3f;   // 表示無窮大
int dx[] = {0, 1, 0, -1};     // 四個方向的x偏移量
int dy[] = {1, 0, -1, 0};     // 四個方向的y偏移量
char s[N][N];           
bool va[N][N], vb[N][N];      // va: 從起點可達的點;vb: 從終點可達的點
int d1[N][N], d2[N][N];       // d1: 起點到各點的最短距離;d2: 終點到各點的最短距離
int n, m;        //從(sx,sy)出發進行BFS,標記所有可達的'.'格子
void bfs1(int sx, int sy, bool vis[N][N]) {queue<pair<int, int>> q;  // 定義隊列用于BFSq.push({sx, sy});         // 起點入隊vis[sx][sy] = true;       // 標記起點為已訪問while (!q.empty()) {      // 隊列不為空時循環int x = q.front().first;   // 取出隊首元素x坐標int y = q.front().second;  // 取出隊首元素y坐標q.pop();                  // 隊首元素出隊// 遍歷四個方向for (int i = 0; i < 4; i++) {int nx = x + dx[i], ny = y + dy[i];  // 計算新坐標// 檢查邊界和是否可訪問if (nx < 1 || nx > n || ny < 1 || ny > m) continue;if (!vis[nx][ny] && s[nx][ny] == '.') {vis[nx][ny] = true;  // 標記為已訪問q.push({nx, ny});    // 新點入隊}}}
}// 從所有已標記的點出發進行BFS,計算到各點的最短距離,多源BFS 
void bfs2(queue<pair<int, int>>& q, int dist[N][N]) {while (!q.empty()) {      // 隊列不為空時循環int x = q.front().first;   // 取出隊首元素x坐標int y = q.front().second;  // 取出隊首元素y坐標q.pop();                  // 隊首元素出隊// 遍歷四個方向for (int i = 0; i < 4; i++) {int nx = x + dx[i], ny = y + dy[i];  // 計算新坐標// 檢查邊界和是否已計算過距離if (nx < 1 || nx > n || ny < 1 || ny > m) continue;if (dist[nx][ny] == INF) {dist[nx][ny] = dist[x][y] + 1;  // 更新最短距離q.push({nx, ny});              // 新點入隊}}}
}
void solve() {cin >> n >> m;  for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {cin >> s[i][j];     va[i][j] = vb[i][j] = false; // 重置可達標記d1[i][j] = d2[i][j] = INF;   // 重置距離為無窮大}}bfs1(1, 1, va);  // 從起點(1,1)出發BFS,標記可達點// 如果終點可達,直接輸出0(不需要拆墻)if (va[n][m]) {cout << 0 << endl;return;}bfs1(n, m, vb);  // 從終點(n,m)出發BFS,標記可達點// 計算起點到各點的最短距離queue<pair<int, int>> q;for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {if (va[i][j]) {          // 如果是起點可達的點d1[i][j] = 0;         // 距離初始化為0q.push({i, j});       // 加入隊列}}}bfs2(q, d1);  // BFS計算最短距離// 清空隊列,計算終點到各點的最短距離while (!q.empty()) q.pop();for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {if (vb[i][j]) {          // 如果是終點可達的點d2[i][j] = 0;         // 距離初始化為0q.push({i, j});       // 加入隊列}}}bfs2(q, d2);  // BFS計算最短距離// 尋找需要拆除的最少墻數int ans = INF;for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {// 如果是墻,且同時被起點和終點的BFS覆蓋if (s[i][j] == '#' && d1[i][j] != INF && d2[i][j] != INF) {ans = min(ans, d1[i][j] + d2[i][j] - 1); // 更新最小拆墻數}}}cout << ans << endl;
}int main() {IOS;int t;cin >> t;          while (t--) {solve();}return 0;
}

G、直徑與最大獨立集

題目鏈接:直徑與最大獨立集
在這里插入圖片描述
在這里插入圖片描述
解題思路:
通過手寫模擬,或者打表,會發現其實是有規律的。

在這里插入圖片描述
在這里插入圖片描述
注意當n等于2時也是有解的
代碼如下:

#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define ll long long
#define endl '\n'
#define pii pair<ll,ll>
signed main()
{IOS;ll t;cin>>t;while(t--){ll n;cin>>n;if(n==4)cout<<-1<<endl;else if(n==2)cout<<1<<" "<<2<<endl; else if(n==3){cout<<1<<" "<<2<<endl;cout<<2<<" "<<3<<endl;}else{ll t=(n+2)/3+2;if(n%3!=1){for(ll i=2;i<=t;i++)cout<<1<<" "<<i<<endl;for(ll i=t;i<n;i++)cout<<i<<" "<<i+1<<endl;}else{for(ll i=2;i<=t;i++)cout<<1<<" "<<i<<endl;for(ll i=t;i<n-1;i++)cout<<i<<" "<<i+1<<endl;cout<<3<<" "<<n<<endl;}}}return 0;
}

H,樹論函數

題目鏈接:樹論函數
在這里插入圖片描述
解題思路,通過打表可以找到規律,就是每一個點都能相互到達,
主要難點就是對于題目的理解。

#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define ll long long
#define endl '\n'
#define pii pair<ll,ll>
signed main()
{IOS;ll t;cin>>t;while(t--){ll s,r,l;cin>>s>>l>>r;cout<<r-l+1<<endl;}return 0;
}

M, 川陀航空學院

題目描述: 川陀航空學院
在這里插入圖片描述
解題思路:
這一就是對于并查集的考察,以及重邊與連通量的關系
在這里插入圖片描述
代碼如下:

#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define ll long long
#define endl '\n'
#define pii pair<ll,ll>
const ll N=1e6+1;ll n,m;
ll s[N];          // 并查集的父節點數組
ll h[N];          // 并查集的樹的高度,用于優化合并// 初始化并查集
void inset() {for(ll i=1;i<=n;i++)s[i]=i, h[i]=0;  // 每個節點的父節點初始為自己,秩初始為0
}// 查找節點x所在集合的根節點,并進行路徑壓縮
ll finds(ll x) {ll r=x;// 找到根節點rwhile(s[r]!=r)r=s[r];// 路徑壓縮:將x到根節點路徑上的所有節點直接連接到根節點rll i=x,j;while(i!=r) {j=s[i];    // 暫存i的父節點s[i]=r;    // 將i的父節點直接設為根節點ri=j;       // 處理下一個節點}return r;
}// 合并節點x和y所在的集合
void mset(ll x,ll y) {x=finds(x), y=finds(y);  // 先找到兩個節點的根節點if(x == y) return;      // 如果已經在同一集合,直接返回// 按秩合并:將高度小的樹合并到高度大的樹if(h[x]==h[y]) {h[x]++;      // 兩棵樹高度相同,合并后x的高度加1s[y]=x;      // 將y的根節點設為x} else {if(h[x]<h[y])s[x]=y;  // x的高度較小,將x的根節點設為yelses[y]=x;  // y的高度較小,將y的根節點設為x}
}signed main() {IOS;cin>>n>>m;inset();           // 初始化并查集// 處理每條邊,合并邊的兩個端點所在集合for(ll i=0;i<m;i++) {ll x,y;cin>>x>>y;mset(x,y);}// 統計連通分量的數量(根節點的數量)ll ans=0;for(ll i=1;i<=n;i++) {if(s[i]==i) ans++;  // 如果節點i的父節點是自己,它就是一個根節點}cout<<m-n+2*ans-1<<endl;return 0;
}

總結

該沉淀了~~~~~~~~~~~~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/86725.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/86725.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/86725.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何使用k8s安裝redis呢

在Kubernetes (k8s) 上安裝Redis 在Kubernetes上安裝Redis有幾種方法&#xff0c;下面我將介紹兩種常見的方式&#xff1a;使用StatefulSet直接部署和使用Helm chart部署。 一、安裝redis 1.1 拉去ARM鏡像&#xff08;7.4.2&#xff09; docker pull registry.cn-hangzhou.ali…

SpringBoot的5種日志輸出規范策略

在企業級應用開發中&#xff0c;合理規范的日志記錄是系統穩定運行、問題排查和性能優化的關鍵保障。 SpringBoot作為流行的Java開發框架&#xff0c;提供了強大而靈活的日志支持&#xff0c;但如何建立統一、高效的日志輸出規范卻是許多團隊面臨的挑戰。 本文將介紹SpringBo…

Python Cookbook-7.11 在 PostgreSQL 中儲存 BLOB

任務 需要將 BLOB 存入一個 PostgreSQL 數據庫。 解決方案 PostgreSQL7.2 以及更新的版本支持大對象,而psycopg 模塊提供了二進制轉義函數: import psycopg,cPickle #連接到數據庫,用你的本機來測試數據庫,并獲得游標 connection = psycopg.connect("dbname = test…

Android端口轉發

如上圖所示&#xff0c;有一個Android設備&#xff0c;Android設備里面有主板&#xff0c;主板上有網絡接口和Wi-Fi&#xff0c;網絡接口通過網線連接了一個網絡攝像頭&#xff0c;這就跟電腦一樣&#xff0c;電腦即可以通過網線接入一個網絡&#xff0c;也可以同時用Wi-Fi接入…

Unity基礎-協程

Unity基礎-協程 四、協程 概述 協程&#xff08;Coroutine&#xff09;&#xff0c;本質上并不是多線程&#xff0c;而是在當前線程中將代碼分時執行&#xff0c;不卡主線程。可以理解為&#xff0c;協程會把可能使主線程卡頓的程序分時分布進行。 協程通常用來&#xff1a;…

UniApp組件封裝,2025年最新HarmonyOS鴻蒙模塊化開發項目式教程

一、環境配置與前置條件 ?開發工具要求? HBuilderX 4.64&#xff08;鴻蒙插件已預裝&#xff09;DevEco Studio 5.0.3.400&#xff08;真機調試必備&#xff09;鴻蒙離線SDK&#xff08;通過HBuilderX導入&#xff0c;每個項目獨立配置&#xff09; ?項目初始化 # 創建Vu…

C++ 精簡知識點

目錄 一、核心語法 1.指針VS引用 2. 類與對象&#xff08;必寫代碼&#xff09; 3. 繼承與多態&#xff08;必寫代碼&#xff09; 4. 模板&#xff08;必寫代碼&#xff09; 5.智能指針 6. 異常處理&#xff08;必寫結構&#xff09; 二、簡答題速記 三、考試應急策略 一…

7.Vue的compute計算屬性

3.8. 【computed】 作用&#xff1a;根據已有數據計算出新數據&#xff08;和Vue2中的computed作用一致&#xff09;。 <template><div class"person">姓&#xff1a;<input type"text" v-model"firstName"> <br>名&am…

在VSCode中借助AI豐富C++Qt應用程序

隨著國內外各類自動化編程助手的普及&#xff0c;作為傳統桌面C開發者&#xff0c;也要及時地用上這樣強大的工具。考慮到網速問題&#xff0c;國外的服務時斷時續&#xff0c;還是傾向于使用一些國產的大語言模型助手。我們今天就來看看在VSCode下使用大語言模型輔助Qt開發。 …

Java八股文——JVM「內存模型篇」

JVM的內存模型介紹一下 面試官您好&#xff0c;您問的“JVM內存模型”&#xff0c;這是一個非常核心的問題。在Java技術體系中&#xff0c;這個術語通常可能指代兩個不同的概念&#xff1a;一個是JVM的運行時數據區&#xff0c;另一個是Java內存模型&#xff08;JMM&#xff0…

RabbitMQ 高可用與可靠性保障實現

RabbitMQ 高可用與可靠性保障實現詳解 一、高可用架構設計1.1 集群部署模式1.2 鏡像隊列&#xff08;Mirrored Queue&#xff09; 二、可靠性保障機制2.1 消息持久化2.2 確認機制&#xff08;Confirm & Ack&#xff09;2.3 死信隊列&#xff08;DLX&#xff09; 三、容災與…

12.7Swing控件6 JList

在 Java Swing 中&#xff0c;列表框&#xff08;JList&#xff09;是用于顯示一組選項的組件&#xff0c;用戶可以從中選擇一個或多個項目。以下是關于 Swing 列表框的詳細介紹&#xff1a; 1. 基本概念與用途 作用&#xff1a;以垂直列表形式展示選項&#xff0c;支持單選或…

C++: condition_variable: wait_for -> unlock_wait_for_lock?

作為C++的初學者,面臨的一個很大的問題,就是很多的概念并不是可以通過名稱直觀的預知它要完成的細節,比如這里的condition_variable的wait_for。C++的設計意圖好像是,我告訴你這樣用,你只要這樣做就行,又簡單還實用!而且需要記住的規則量又大的驚人。最后看起來,更像是…

HTML版英語學習系統

HTML版英語學習系統 這是一個完全免費、無需安裝、功能完整的英語學習工具&#xff0c;使用HTML CSS JavaScript實現。 功能 文本朗讀練習 - 輸入英文文章&#xff0c;系統朗讀幫助練習聽力和發音&#xff0c;適合跟讀練習&#xff0c;模仿學習&#xff1b;實時詞典查詢 - 雙…

【JUC面試篇】Java并發編程高頻八股——線程與多線程

目錄 1. 什么是進程和線程&#xff1f;有什么區別和聯系&#xff1f; 2. Java的線程和操作系統的線程有什么區別&#xff1f; 3. 線程的創建方式有哪些? 4. 如何啟動和停止線程&#xff1f; 5. Java線程的狀態模型&#xff08;有哪些狀態&#xff09;&#xff1f; 6. 調用…

LSTM-SVM多變量時序預測(Matlab完整源碼和數據)

LSTM-SVM多變量時序預測&#xff08;Matlab完整源碼和數據&#xff09; 目錄 LSTM-SVM多變量時序預測&#xff08;Matlab完整源碼和數據&#xff09;效果一覽基本介紹程序設計參考資料 效果一覽 基本介紹 代碼主要功能 該代碼實現了一個LSTM-SVM多變量時序預測模型&#xff0c…

ES6——數組擴展之Set數組

在ES6&#xff08;ECMAScript 2015&#xff09;中&#xff0c;JavaScript的Set對象提供了一種存儲任何值唯一性的方式&#xff0c;類似于數組但又不需要索引訪問。這對于需要確保元素唯一性的場景非常有用。Set對象本身并不直接提供數組那樣的方法來操作數據&#xff08;例如ma…

日志收集工具-logstash

提示&#xff1a;Windows 環境下 安裝部署 logstash 采集日志文件 文章目錄 一、下載二、解壓部署三、常用插件四、常用配置 Logstash 服務器數據處理管道&#xff0c;能夠從多個來源采集數據&#xff0c;轉換數據&#xff0c;然后將數據發送到您最喜歡的存儲庫中。Logstash 沒…

6個月Python學習計劃 Day 21 - Python 學習前三周回顧總結

? 第一周&#xff1a;基礎入門與流程控制&#xff08;Day 1 - 7&#xff09; “打地基”的一周&#xff0c;我們走完了從變量、輸入輸出、判斷、循環到第一個小型系統的完整鏈路。 &#x1f4d8; 學習重點&#xff1a; Python 基礎語法&#xff1a;變量類型、字符串格式化、注…

Spring Boot SQL數據庫功能詳解

Spring Boot自動配置與數據源管理 數據源自動配置機制 當在Spring Boot項目中添加數據庫驅動依賴&#xff08;如org.postgresql:postgresql&#xff09;后&#xff0c;應用啟動時自動配置系統會嘗試創建DataSource實現。開發者只需提供基礎連接信息&#xff1a; 數據庫URL格…