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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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格…