2021年蓝桥杯C/C++大学B组省赛真题(路径)

此博客介绍了小蓝在一张特殊图中寻找最短路径的问题,该图由2021个节点组成,节点间边的长度由节点差的绝对值与最小公倍数决定。博主提供了使用Dijkstra算法求解1号节点到2021号节点的最短路径长度的代码实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述:

小蓝学习了最短路径之后特别高兴,他定义了一个特别的图,希望找到图中的最短路径。
小蓝的图由2021 个结点组成,依次编号1 至2021。
对于两个不同的结点a, b,如果a 和b 的差的绝对值大于21,则两个结点之间没有边相连;
如果a 和b 的差的绝对值小于等于21,则两个点之间有一条长度为a 和b 的最小公倍数的无向边相连。
例如:结点1 和结点23 之间没有边相连;结点3 和结点24 之间有一条无向边,长度为24;
结点15 和结点25 之间有一条无向边,长度为75。
请计算,结点1 和结点2021 之间的最短路径长度是多少。
提示:建议使用计算机编程解决问题。

代码:

#include <bits/stdc++.h>
using namespace std;
const int INF=0x3f3f3f3f;
int a[3000][3000];
bool vis[3000];
int dist[3000];
void dijkastra(){
	memset(dist,0x3f,sizeof dist);
	dist[1]=0;
	for(int i=1;i<=2021;i++){
		int t=-1;
		for(int j=1;j<=2021;j++){
			if(!vis[j]&&(t==-1||dist[j]<dist[t]))t=j;
		}
		vis[t]=true;
		for(int j=1;j<=2021;j++){
			if(!vis[j]){
				dist[j]=min(dist[j],dist[t]+a[t][j]);
			}
		}
	}
	
}
int main(){
	memset(a,0x3f,sizeof a);
    for(int i=1;i<=2021;i++){
    	for(int j=1;j<=2021;j++){
    	    if(abs(j-i)>21)a[i][j]=a[j][i]=INF;
		    else{
		    	int t=__gcd(i,j);
		    	a[i][j]=a[j][i]=i/t*j;
			}
		}
	}
    dijkastra();
    cout<<dist[2021]<<endl;
    return 0;
}

代码测试链接:P1553 - [蓝桥杯2021初赛] 路径 - New Online Judge

<think>好的,我现在需要帮助用户了解蓝桥杯Java B的相关信息,包括历真题、解题思路和比规则。首先,我要确认用户的需求是什么。用户可能正在准备参加蓝桥杯,想通过历真题来练习,并了解解题思路和比规则以便更好地备考。 接下来,我需要收集相关信息。根据用户提供的引用内容,引用[1]提到了2023真题及解析,用户可能在解题时遇到了困难,特别是动态规划相关的题目。引用[2]提到了运行限制,比如Java的最大运行时间是2秒,内存256MB,这属于比规则的一部分。引用[3]展示了一个解法片段,可能涉及数操作,这可以帮助用户了解解题思路。 然后,我需要将这些信息整理成结构清晰的回答。首先介绍比的基本情况,包括别设置和考察内容。然后分点说明比规则,特别是时间、内存限制和注意事项。接下来是历真题和解题思路,这里需要结合引用中的例子,比如动态规划题目“数切分”,并给出具体的解题步骤和示例代码。最后,提供备考建议,帮助用户高效准备。 同时,根据系统指令,需要生成相关问题。我需要考虑用户可能还想知道什么,比如如何获取真题资源、如何优化代码性能、常见题型有哪些等。这些问题应该覆盖用户潜在的需求,帮助他们进一步探索。 在回答过程中,要确保使用正确的中文表达,数学公式用$...$或$$...$$格式。例如,在讲解动态规划时,如果有涉及数学公式,需要正确应用LaTeX语法。同时,引用标注要自然,例如在提到动态规划的例子时,添加引用标识[^1]。 最后,检查回答是否符合所有系统指令,确保没有遗漏任何要求,比如使用中文、正确格式的LaTeX、生成相关问题等。确保回答真实可靠,结构清晰,帮助用户逐步解决问题。</think>### 蓝桥杯 Java B信息整理 #### **1. 比基本情况** - **别设置**:蓝桥杯分为A/B/C,Java B主要面向非985/211院校本科生,考察编程能力与算法设计[^2]。 - **题型分布**:包含填空题、编程题,近编程题占比增加,侧重动态规划、数据结构、数学建模等。 #### **2. 比规则** - **时间与内存限制**: - **Java**:最大运行时间2秒,内存256MB[^2]。 - **Python/C/C++**:时间更短(如Python为3.3秒),需注意代码效率优化。 - **提交要求**: - 答案首位不可为0(例如填空题输出数值时需注意格式)[^2]。 - 编程题需通过标准输入输出,禁止文件操作。 #### **3. 历真题与解题思路** ##### **典型题型与示例** 1. **动态规划** **例题**:2023“数切分”问题(要求将数分割为满足特定条件的子数) **解题步骤**: - 定义状态:$dp[i]$表示前$i$个元素的合法切分方案数。 - 状态转移:若子数$[j+1, i]$满足条件,则$dp[i] += dp[j]$。 - 边界条件:$dp[0] = 1$(空数视为一种方案)。 ```java // 伪代码示例 int[] dp = new int[n+1]; dp[0] = 1; for (int i = 1; i <= n; i++) { for (int j = 0; j < i; j++) { if (isValidSubarray(j+1, i)) { dp[i] += dp[j]; } } } ``` 2. **贪心与数学建模** **例题**:2022“最优操作次数”问题(通过特定操作使数有序)。 **关键点**:分析操作性质,发现规律,例如通过逆序对数量推导最小操作次数。 3. **数据结构应用** **例题**:2021路径计数”问题(使用图论或并查集优化查询)[^3]。 **技巧**:将条件转化为图结构,用DFS/BFS或并查集快速判断连通性。 ##### **真题资源获取** - 官网:蓝桥杯官网提供部分历真题。 - 社区:CSDN、GitHub等平台有选手分享题解(注意代码正确性验证)。 #### **4. 备考建议** 1. **算法专项训练**: - 高频考点:动态规划、搜索(DFS/BFS)、字符串处理。 - 推荐刷题平台:LeetCode、AcWing(按标签分类练习)。 2. **代码效率优化**: - 减少冗余计算(如预处理、记忆化)。 - 避免使用高复杂度API(如Java的`ArrayList`频繁增删)。 3. **模拟考试**: - 使用历真题限时训练,适应比节奏。 --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值