【2021天梯赛训练-10】7-6 单源最短路径
请编写程序求给定正权有向图的单源最短路径长度。图中包含n个顶点,编号为0至n-1,以顶点0作为源点。
输入格式:输入第一行为两个正整数n和e,分别表示图的顶点数和边数,其中n不超过20000,e不超过1000。接下来e行表示每条边的信息,每行为3个非负整数a、b、c,其中a和b表示该边的端点编号,c表示权值。各边并非按端点编号顺序排列。
输出格式:输出为一行整数,为按顶点编号顺序排列的源点0到各顶点的最短路径长度(不含源点到源点),每个整数后一个空格。如源点到某顶点无最短路径,则不输出该条路径长度。
输入样例:123454 40 1 10 3 11 3 12 0 1
输出样例:11 1
思路:
这里采取的是邻接表存储信息的操作,因为n值较大,设置dis数组存储源点到各个点的最短距离,注意初始化
采用了最普通的Dijkstra算法,每次寻找最小权值,并判断是否可以进行松弛。
最后输出时注意,无最短路径时(即两点间距离为无穷时),不输出对应的dis值
代码:1234567891011121314151617181920212223242526272829303132333435363 ...
【2021天梯赛训练-10】 7-5 敲笨钟
微博上有个自称“大笨钟V”的家伙,每天敲钟催促码农们爱惜身体早点睡觉。为了增加敲钟的趣味性,还会糟改几句古诗词。其糟改的方法为:去网上搜寻压“ong”韵的古诗词,把句尾的三个字换成“敲笨钟”。例如唐代诗人李贺有名句曰:“寻章摘句老雕虫,晓月当帘挂玉弓”,其中“虫”(chong)和“弓”(gong)都压了“ong”韵。于是这句诗就被糟改为“寻章摘句老雕虫,晓月当帘敲笨钟”。
现在给你一大堆古诗词句,要求你写个程序自动将压“ong”韵的句子糟改成“敲笨钟”。
输入格式:输入首先在第一行给出一个不超过 20 的正整数 N。随后 N 行,每行用汉语拼音给出一句古诗词,分上下两半句,用逗号 , 分隔,句号 . 结尾。相邻两字的拼音之间用一个空格分隔。题目保证每个字的拼音不超过 6 个字符,每行字符的总长度不超过 100,并且下半句诗至少有 3 个字。
输出格式:对每一行诗句,判断其是否压“ong”韵。即上下两句末尾的字都是“ong”结尾。如果是压此韵的,就按题面方法糟改之后输出,输出格式同输入;否则输出 Skipped,即跳过此句。
输入样例:1234565xun zhang zhai ju l ...
每日分享day9 左耳听风专栏分享(六)Linux系统、内存和网络
**河北大学程序设计训练营每日分享-day10
77 | 程序员练级攻略:Linux系统、内存和网络77 | 程序员练级攻略:Linux系统、内存和网络
文章介绍了 进阶体系 每一部分的学习重点后面着重介绍了 Linux 系统、内存和计算机网络 的学习资料和学习要求罗列了各种文章和资源,并给出了简短的推荐语言,就是在为大家梳理信息源,而不是喂大家吃饭。从而实现自趋势地成长。
进阶方面的重点系统底层相关。主要是以 Linux 系统为主,学好这些东西,你会对系统有很深的理解,而且可以把这些知识反哺到架构设计上来。数据库相关。数据库方面主要是 MySQL 和各种开源 NoSQL分布式架构。架构入门、分布式理论中各种非常有价值的经典论文,然后是一些分布式工程设计方面的文章,其中包括设计模式和工程应用,最后还有各大公司的架构供参考。微服务。介绍微服务架构非常系统的文章,然后比较一下微服务和 SOA 的差别,最后则是一些工程实践和最佳实践。容器化和自动化运维。主要是学习 Docker 和 Kubernetes 这两个自动化运维的杀手型技术。只有 Docker 和 Kubernetes 才是未来。机 ...
【2021天梯赛训练-9】7-10 重建二叉树 (10 分)
给定二叉树的中根序列和后根序列,请编写程序创建该二叉树,计算其高度和先根序列,最后删除该二叉树;如给定的中根和后根序列不合法,则亦能识别。
输入格式:输入为两行字符串,第一行表示某二叉树的后根序列,第二行表示其中根序列。结点的值均为A-Z的大写字母,故二叉树结点个数不超过26,且保证输入的两个序列都是结点的全排列,但不一定是合法的中根和后根序列。
输出格式:如果输入的序列不合法(不是同一棵树的中根序列和后根序列),则输出INVALID。若输入序列合法,输出为两行,第一行为一个整数,表示该二叉树的高度,第二行为一个字符串,表示该二叉树的先根序列。
输入样例1:12CEFDBHGACBEDFAGH
输出样例1:123ABCDEFGH
输入样例2:12CBEDFAGHCEFDBHGA
输出样例2:1INVALID
输入样例3:12BCA CAB
输出样例3:1INVALID
思路:· 检测输入的后序+中序是否为同一棵树:使用bool check(string str1,string str2)函数判断两个序列全部子树所对应的左子树、根、右子树是否分别长度相等且含有同样的元素。若满 ...
【2021天梯赛训练-9】7-8 城市间紧急救援 (25 分)
作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求助电话给你的时候,你的任务是带领你的救援队尽快赶往事发地,同时,一路上召集尽可能多的救援队。
输入格式:输入第一行给出4个正整数N、M、S、D,其中N(2≤N≤500)是城市的个数,顺便假设城市的编号为0 ~ (N−1);M是快速道路的条数;S是出发地的城市编号;D是目的地的城市编号。
第二行给出N个正整数,其中第i个数是第i个城市的救援队的数目,数字间以空格分隔。随后的M行中,每行给出一条快速道路的信息,分别是:城市1、城市2、快速道路的长度,中间用空格分开,数字均为整数且不超过500。输入保证救援可行且最优解唯一。
输出格式:第一行输出最短路径的条数和能够召集的最多的救援队数量。第二行输出从S到D的路径中经过的城市编号。数字间以空格分隔,输出结尾不能有多余空格。
输入样例:12345674 5 0 320 30 40 100 1 11 3 20 3 30 2 22 3 2
输出样例: ...
每日分享day9 左耳听风专栏分享(五)软件开发
河北大学程序设计训练营每日分享-day09
今天分享的是 六篇免费解锁的文章的第五篇
76 | 程序员练级攻略:软件设计76 | 程序员练级攻略:软件设计
软件设计这一篇章,帮助那些想成长为软件工程师、设计师或架构师的程序员,提高软件设计的品位,进而实现自己的目标。
学习软件设计的方法、理念、范式和模式,是让你从一个程序员通向工程师的必备技能**用实践、用时间、用错误、用教训、用痛苦才能真正体会其中的精髓** 除了学习理论知识外,你还需要大量的工程实践**“品位”不同,是各层次程序员之间最大的区别,这也决定了他们所做出来的软件的质量和价值。**学习编程范式其实是非常非常重要的事,能够明白编程的本质和各种语言的编程方式。
需要自己用实践、用时间、用错误、用教训、用痛苦才能真正体会其中的精髓
从自己擅长的部分入手,逐步扩大。
把计算机技术作为一个终身的奋斗目标,从这角度出发,系统基本功越早学越好,何时学都不晚。
耗叔成功给我们穿了一条线,能少走很多弯路。
至于每个人能领略到何种程度,最终能达到何种高度,最后拼的还是脑袋+耐力。
面对这么多维度的知识,该如何平衡各部分的时间,也是因人而 ...
【2021天梯赛训练-9】7-9 小字辈 (25 分)
本题给定一个庞大家族的家谱,要请你给出最小一辈的名单。
输入格式:输入在第一行给出家族人口总数 N(不超过 100 000 的正整数) —— 简单起见,我们把家族成员从 1 到 N 编号。随后第二行给出 N 个编号,其中第 i 个编号对应第 i 位成员的父/母。家谱中辈分最高的老祖宗对应的父/母编号为 -1。一行中的数字间以空格分隔。
输出格式:首先输出最小的辈分(老祖宗的辈分为 1,以下逐级递增)。然后在第二行按递增顺序输出辈分最小的成员的编号。编号间以一个空格分隔,行首尾不得有多余空格。
输入样例 1:1292 6 5 5 -1 5 6 4 7
输出样例 1:1241 9
思路:因为边权为1,而且是个拓扑图,所以直接宽搜求距离就可以了。
1234567891011121314151617181920212223242526272829303132333435#include<bits/stdc++.h>using namespace std;const int N=2e5+5;typedef pair<int,int> pii;int e[N],ne[N ...
【2021天梯赛训练-9】7-7 猜数字 (20 分)
一群人坐在一起,每人猜一个 100 以内的数,谁的数字最接近大家平均数的一半就赢。本题就要求你找出其中的赢家。
输入格式:输入在第一行给出一个正整数N(≤104)。随后 N 行,每行给出一个玩家的名字(由不超过8个英文字母组成的字符串)和其猜的正整数(≤ 100)。
输出格式:在一行中顺序输出:大家平均数的一半(只输出整数部分)、赢家的名字,其间以空格分隔。题目保证赢家是唯一的。
输入样例 1:1234567Bob 35Amy 28James 98Alice 11Jack 45Smith 33Chris 62
输出样例 1:122 Amy
思路:主要考察STL,哈希表map存值就行了
123456789101112131415161718#include<bits/stdc++.h>using namespace std;int main(){ int n,sum=0,ave,delta=1e9; unordered_map<string,int>m; cin>>n; string s,ans; wh ...
每日分享day8 左耳听风专栏分享(四)系统知识学习
河北大学程序设计训练营每日分享-day08
系统知识75 | 程序员练级攻略:系统知识**75 | 程序员练级攻略:系统知识
这一讲 是程序员练习攻略 专业基础篇的最后一篇罗列了网络和系统 方面需要掌握的知识,并且在文末对整个基础知识部分做了 概括性的总结
专业编程方面最为重要的三部分内容:
编程语言、理论学科和系统知识
算法和数据结构这个太重要了,尤其是最基础的算法和数据结构,这是任何一个称职的程序员都需要学习和掌握的。你必需要掌握。
计算机的相关系统你至少要掌握三个系统的基础知识,一个是操作系统,一个是网络系统,还有一个是数据库系统。它们分别代表着计算机基础构架的三大件——计算、存储、网络。
方向建议术业有专攻了。下面给一些建议的方向。
底层方向:操作系统、文件系统、数据库、网络……架构方向:分布式系统架构、微服务、DevOps、Cloud Native……数据方向:大数据、机器学习、人工智能……前端方向:你对用户体验或是交互更感兴趣,那么你走前端的路吧。其它方向:比如,安全开发、运维开发、嵌入式开发……这些方向你要仔细选择,因为一旦选好,就要勇往直前地走下去,当然,你要回头转别的 ...
【2021天梯赛训练-8】7-5 整除光棍
这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由1组成的数字,比如1、11、111、1111等。传说任何一个光棍都能被一个不以5结尾的奇数整除。比如,111111就可以被13整除。 现在,你的程序要读入一个整数x,这个整数一定是奇数并且不以5结尾。然后,经过计算,输出两个数字:第一个数字s,表示x乘以s是一个光棍,第二个数字n是这个光棍的位数。这样的解当然不是唯一的,题目要求你输出最小的解。
提示:一个显然的办法是逐渐增加光棍的位数,直到可以整除x为止。但难点在于,s可能是个非常大的数 —— 比如,程序输入31,那么就输出3584229390681和15,因为31乘以3584229390681的结果是111111111111111,一共15个1。
输入格式:输入在一行中给出一个不以5结尾的正奇数x(<1000)。
输出格式:在一行中输出相应的最小的s和n,其间以1个空格分隔。
输入样例:131
输出样例:13584229390681 15
思路:其实是模拟除法的过程:先找到第一个大于n的光棍数,并且记录位数(注意初始值为1);然后进入循环,输出当前第一位,若能整除n则结束 ...