【ACM】—蓝桥杯大一暑期集训Day4

这篇具有很好参考价值的文章主要介绍了【ACM】—蓝桥杯大一暑期集训Day4。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🚀欢迎来到本文🚀
🍉个人简介:陈童学哦,目前学习C/C++、算法、Python、Java等方向,一个正在慢慢前行的普通人。
🏀系列专栏:陈童学的日记
💡其他专栏:C++STL,感兴趣的小伙伴可以看看。
🎁希望各位→点赞👍 + 收藏⭐️ + 留言📝 ​
⛱️学习应使你快乐!望与诸君共勉!

【ACM】—蓝桥杯大一暑期集训Day4,陈童学的日记,ACM,蓝桥杯,算法,c++,图论

A - 医院设置

来源:洛谷P1364 医院设置
算法标签:动态规划,dp、树形数据结构、广度优先搜索,BFS、最短路
【ACM】—蓝桥杯大一暑期集训Day4,陈童学的日记,ACM,蓝桥杯,算法,c++,图论
【ACM】—蓝桥杯大一暑期集训Day4,陈童学的日记,ACM,蓝桥杯,算法,c++,图论

解题思路

这题是一道最短路问题,先用邻接矩阵建一棵树,然后用Floyd(弗洛伊德)算法求任意两点间的最短路,然后再遍历所有节点看看在哪个节点距离和最小

示例代码

#include<bits/stdc++.h>
using namespace std;
int a[105],g[105][105]; 
int main()
{
	int n,l,r,minn,sum;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
			g[i][j]=0x3f3f3f3f;
	}
	for(int i=1;i<=n;i++)
	{
		g[i][i]=0;
		cin>>a[i]>>l>>r;
		if(l>0)
			g[i][l]=g[l][i]=1;
		if(r>0)
			g[i][r]=g[r][i]=1;
	}
	//Floyd求最短路
	for(int k=1;k<=n;k++)
	{
		for(int i=1;i<=n;i++)
		{
			if(i!=k)
			{
				for(int j=1;j<=n;j++)
				{
					if(i!=j&&k!=j&&g[i][k]+g[k][j]<g[i][j])
						g[i][j]=g[i][k]+g[k][j];
				}
			}
		}
	}
	minn=0x7fffffff;
	for(int i=1;i<=n;i++)
	{
		sum=0;
		for(int j=1;j<=n;j++)
			sum+=g[i][j]*a[j];
		if(sum<minn)
			minn=sum;
	}
	cout<<minn;
}

B - Destroyer

来源:Codeforces A. Destroyer
【ACM】—蓝桥杯大一暑期集训Day4,陈童学的日记,ACM,蓝桥杯,算法,c++,图论
【ACM】—蓝桥杯大一暑期集训Day4,陈童学的日记,ACM,蓝桥杯,算法,c++,图论
【ACM】—蓝桥杯大一暑期集训Day4,陈童学的日记,ACM,蓝桥杯,算法,c++,图论

解题思路

统计每个数出现的次数,只需满足a[i]<=a[i-1]即可

示例代码

#include <bits/stdc++.h>
using namespace std;
void solve() 
{
	int n,num; 
	cin>>n;
	int a[105]={0};
	//memset(a,0,sizeof a);
	for(int i = 1 ; i <=n  ; i++)
	{
		cin>>num;
		a[num]++;
	}
	int judge = 1;
	for(int i=1;i<105;i++)
	{
		if(a[i] > a[i-1])
		{
			judge = 0;
			break;
		}
			
	}
	if(judge)
		cout<<"YES\n";
	else
		cout<<"NO\n";
}            
int main() 
{
    int t;
	cin>>t;
    while(t--)
    {
    	solve();
    }
    return 0;
}

C - 单源最短路径(弱化版)

来源:洛谷P3371 【模板】单源最短路径(弱化版)
算法标签:图论、最短路、O2优化
【ACM】—蓝桥杯大一暑期集训Day4,陈童学的日记,ACM,蓝桥杯,算法,c++,图论
【ACM】—蓝桥杯大一暑期集训Day4,陈童学的日记,ACM,蓝桥杯,算法,c++,图论

解题思路

这题的数据用邻接矩阵的话好像过不了,我不会做(手动流泪),我看有大佬们有用Floyd优化的、Dijkstra+堆优化、SPFA优化等,我这里参考了一位用链式向前星储存图+Dijkstra的大佬的代码。真难啊家人们。

示例代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1000010;
int head[N],cnt;
ll ans[N];
bool visit[N];
int n,m,s;
struct node
{
	int to;
	int nextt;
	int wei;
}edge[N];
void addedge(int x,int y,int z)
{
	edge[++cnt].to=y;
	edge[cnt].wei=z;
	edge[cnt].nextt=head[x];
	head[x]=cnt;
}
int main()
{
	cin>>m>>n>>s;
	for(int i=1;i<=n;i++)
		ans[i]=2147483647;
	ans[s]=0;
	int a,b,c;
	for(int i=1;i<=n;i++)
	{
		cin>>a>>b>>c;
		addedge(a,b,c);
	}
	int position=s;
	while(visit[position]==0)
	{
		ll minn =2147483647;
		visit[position]=1;
		for(int i=head[position];i!=0;i=edge[i].nextt)
		{
			if(!visit[edge[i].to]&&ans[edge[i].to]>ans[position]+edge[i].wei)
				ans[edge[i].to]=ans[position]+edge[i].wei;
		}
		for(int i=1;i<=m;i++)
		{
			if(ans[i]<minn&&visit[i]==0)
			{
				minn=ans[i];
				position=i;
			}
		}
	}
	for(int i=1;i<=m;i++)
		cout<<ans[i]<<" ";
}

D - 某最短路

来源:洛谷B3647 【模板】Floyd 算法
算法标签:最短路

【ACM】—蓝桥杯大一暑期集训Day4,陈童学的日记,ACM,蓝桥杯,算法,c++,图论

解题思路

要求任意两点之间的距离,数据也不是很大,这题用Floyd跑一遍就OK了

示例代码

#include<bits/stdc++.h>
using namespace std;
int n,m;
int u,v,w;
int g[105][105];
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
		{
			if(i==j)
				g[i][j]=0;
			else
				g[i][j]=1e9;
		}
			
	for(int i=1;i<=m;i++)
	{
		cin>>u>>v>>w;
		g[u][v]=g[v][u]=w;
	}
	for(int k=1;k<=n;k++)
	{
		for(int i=1;i<=n;i++)
		{
			for(int j=1;j<=n;j++)
			{
				if(g[i][j]>g[i][k]+g[k][j])
					g[i][j]=g[i][k]+g[k][j];
			}
		}
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
			cout<<g[i][j]<<" ";
		cout<<endl;
	}
}

E - Sasha and Array Coloring

来源:CodeforcesA. Sasha and Array Coloring
【ACM】—蓝桥杯大一暑期集训Day4,陈童学的日记,ACM,蓝桥杯,算法,c++,图论
【ACM】—蓝桥杯大一暑期集训Day4,陈童学的日记,ACM,蓝桥杯,算法,c++,图论
【ACM】—蓝桥杯大一暑期集训Day4,陈童学的日记,ACM,蓝桥杯,算法,c++,图论

解题思路

这题模拟一下,要得到最大值,采用贪心策略,先对数组进行排序,然后每次用末尾数减去首位数,全部相加即可求解

示例代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int t;	
	cin>>t;
	while(t--)
	{
		int n;
		cin>>n;
		int a[105],sum=0;
		for(int i=0;i<n;i++)
			cin>>a[i];
		sort(a,a+n);
		int i=0,j=n-1;
		while(i<j)
		{
			sum+=a[j]-a[i];
			i++;
			j--;
		}
		cout<<sum<<endl;
	}
}

总结

Day4的题主要考察最短路径、图论问题,这类题较难。
算法:贪心、Floyd、Dijkstra、SPFA、DFS、BFS、dp
感悟:图论最短路的题比较难,有时难得我头炸裂(哭脸)
总结:对于求最短路的各类算法还不是太熟练,还需多加练习加以掌握文章来源地址https://www.toymoban.com/news/detail-579572.html

到了这里,关于【ACM】—蓝桥杯大一暑期集训Day4的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 蓝桥杯·3月份刷题集训Day03

    本篇博客旨在记录自已打卡蓝桥杯3月份刷题集训,同时会有自己的思路及代码解答希望可以给小伙伴一些帮助。本人也是算法小白,水平有限,如果文章中有什么错误之处,希望小伙伴们可以在评论区指出来,共勉💪。 A1、扫雷 题目 :在一个 n 行 m 列的方格图上有一些位置

    2023年04月09日
    浏览(33)
  • 蓝桥杯省赛7日集训-简单数论 Day1-Day2

    这是一个比较简单的质因数分解问题,可以使用试除法求解。具体实现过程如下: 从标准输入中读取正整数 n。 从 2 开始依次尝试将 n 进行除法运算,如果 n 能够被当前的数整除,则说明当前数是 n 的一个质因数,将 n 除以当前数,然后继续尝试除以当前数,直到 n 不能被当

    2023年04月08日
    浏览(31)
  • 蓝桥杯 题库 简单 每日十题 day4

    津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。假设津津不会因为其它事不高兴

    2024年02月07日
    浏览(49)
  • 蓝桥杯备赛 | 洛谷做题打卡day4

    高精度加法,相当于 a+b problem, 不用考虑负数 。 分两行输入。 a , b ≤ 1 0 500 a,b leq 10^{500} a , b ≤ 1 0 500 。 输出只有一行,代表 a + b a+b a + b 的值。 样例输入 #1 样例输出 #1 样例输入 #2 样例输出 #2 学会利用新知,自己多试试并尝试积攒一些固定解答方案,debug,以下是我的

    2024年01月17日
    浏览(45)
  • 算法竞赛备赛之经典基础算法训练提升,暑期集训营培训

      目录 1.排序 1.1.快速排序 1.2.归并排序 2.二分 2.1.整数 2.2.浮点数 3.高精度 3.1.高精度加法 3.2.高精度减法 3.3.高精度乘法 3.4.高精度除法 4.前缀和 5.差分 6.双指针算法 7.位运算 8.离散化 8.1.unique函数实现 9.区间合并 快速排序的基本思想来自于分治。 首先,确定分界点的方法:

    2024年02月15日
    浏览(46)
  • 算法竞赛备赛之经典数据结构训练提升,暑期集训营培训

    我们将结构体和指针结合来实现链表 我们算法主要是用数组来模拟链表,这样效率会高一些。 数组模拟单链表 邻接表:存储图和树 实现一个单链表,链表初始为空,支持三种操作: 向链表头插入一个数 删除第k个插入的数后面的数 在第k个前面插入一个数 数组模拟双链表的

    2024年02月16日
    浏览(52)
  • 算法竞赛备赛之搜索与图论训练提升,暑期集训营培训

    目录 1.DFS和BFS 1.1.DFS深度优先搜索 1.2.BFS广度优先搜索 2.树与图的遍历:拓扑排序 3.最短路  3.1.迪杰斯特拉算法 3.2.贝尔曼算法 3.3.SPFA算法 3.4.多源汇最短路Floy算法 4.最小生成树 4.1.普利姆算法 4.2.克鲁斯卡尔算法 5.二分图:染色法,匈牙利算法 5.1.染色法 5.2.匈牙利算法 深度优

    2024年02月13日
    浏览(34)
  • 【蓝桥杯Web】大一小白参与蓝桥杯模拟赛二期web组体会

    目录 前言 一、相关比赛介绍 1.ACM国际大学生程序设计竞赛 2.蓝桥杯 3.GPLT团队程序设计天梯赛 4.leetcode周赛和双周赛 5.PAT 二、蓝桥杯 1.应该参加蓝桥杯吗? 2.如何进行蓝桥杯的准备 三.蓝桥杯模拟赛二期web组真题 1.凭空消失的TA(简单) 2.用户名片(简单) 3.芝麻开门(中等)

    2023年04月08日
    浏览(42)
  • 【蓝桥杯集训·周赛】AcWing 第94场周赛

    4870. 装物品 已知,每个背包最多可以装 5 件物品。 请你计算, 要装下 x 件物品最少需要多少个背包 。 输入格式 一个整数 x。 输出格式 一个整数,表示所需背包的最少数量。 数据范围 所有测试点满足 1≤x≤10 6 。 输入样例1 : 输出样例1 : 输入样例2 : 输出样例2 : 我的

    2023年04月08日
    浏览(39)
  • 【蓝桥杯集训·每日一题】AcWing 3305. 作物杂交

    3305. 作物杂交 作物杂交是作物栽培中重要的一步。 已知有 N 种作物 (编号 1 至 N),第 i 种作物从播种到成熟的时间为 Ti。 作物之间两两可以进行杂交,杂交时间取两种中时间较长的一方。 如作物 A 种植时间为 5 天,作物 B 种植时间为 7 天,则 AB 杂交花费的时间为 7 天。 作

    2023年04月13日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包