![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法题
遇到的算法题目
砸war鲁多
这个作者很懒,什么都没留下…
展开
-
最长上升子序列学习笔记
最长上升子序列求一组数中最长上升子序列,该子序列严格满足 若i < j ,则a [ i ] < a [ j ]。动态规划:a [ i ] 表示该组数,b [ i ] 表示以a [ i ]为上升子序列最后一个数的最长上升子序列长度。遍历数组,再找到已经遍历过数字x (设为x)中比当前遍历到的数字y (设为y) 小并且b [ x ]最大的数。 即x < y 且 b [ x ] 最大。b [ y ] = b [ x ]+1 因为上升子序列,子序列最后一个数一定是序列中最大的数。最长只要原创 2020-11-18 17:23:15 · 93 阅读 · 1 评论 -
1100 Mars Numbers (20 分)
1100 Mars Numbers (20 分)题意10进制与13进制数的转换。给出一些字符串分别代表0-13和13的1到12倍(即13 26 39…)给你一个十进制数或者这些字符表示的13进制数,写出对应的进制数(给出十进制数写出对应的字符串表示的13进制数,给出字符串表示13进制数则写出对应的十进制数) (数的范围 [0,169)思路开始没看懂题,看到后面的范围才反应过来。模拟十进制与13进制的相互转换,再找到对应的字符串即可。唯一麻烦的就是把13进制数与对应字符串的转换,最后提交出了点bug(原创 2021-06-28 19:29:31 · 62 阅读 · 0 评论 -
1036 Boys vs Girls (25 分)笔记
1036 Boys vs Girls (25 分)题意给出N个学生的信息(姓名 id 性别 成绩),找出这些学生中男生中的最低分和女生中的最高分,输出他们的姓名和id以及成绩差。可能会没有男生或女生。解题过程一道简单题,解题过程未踩到坑。解题思路创捷一个结构体数组储存每个学生的信息,建立两个变量记录最低分男生和最高分女生,最后比较一下就可以了。代码#include<stdio.h>#include<string.h>typedef struct node{ in原创 2021-04-05 13:11:15 · 79 阅读 · 0 评论 -
1057 Stack (30 分)笔记
1057 Stack (30 分)心得ac题目固然开心,但刷题的本质是提升自己。走陌生的路的过程是痛苦的,但抵达的也是之前从未领略过的风景。题意模仿堆栈的一系列操作,入栈和出栈,增添了一个查找中位数的操作(给出一系列操作,分别是入栈,出栈,查找堆栈中所有元素的中位数)n个操作,加入的数x n和x均为不大于1e5的正整数解题过程一看题目,30分,应该有点难度,有些心理准备。看了题目大意之后发现实现并不难,难的是数据量大,找中位数用普通手段应该会超时,但还是试了一下,用数组模拟堆栈,找中位数就原创 2021-04-11 17:12:38 · 88 阅读 · 0 评论 -
1136 A Delayed Palindrome (20 分)
1136 A Delayed Palindrome (20 分)题意给出一个数(这个数可能很大),判断它是否是回文数(第一个位数字和最后一个数字相等,第二个和倒数第二个相等…)如果是,则输出 “xx is a palindromic number.” 否则让这个数加上它的反向数(最高位变成最低位,第二高位变为第二第位…),得到的结果xxx如果是回文数仍输出 “xxx is a palindromic number.” 否则继续进行上述运算,每次运算都要输出运算式子(形如 a + b = c )原创 2021-06-26 20:48:56 · 63 阅读 · 0 评论 -
1144 The Missing Number (20 分)
1144 The Missing Number (20 分)题意给出一个含有n个元素的数列,找到一个最小正整数,它在该数列中未出现过。如数列{1,2,4,5},答案为3解题过程顺利ac未踩到坑。解题思路建立一个数组x把大于0的数都存起来从小到大排个序,设置一个标temp初始化为1开始与x中的数比较。比较有三种结果:1 temp=x[i] ,temp这个数在数列中存在,temp继续往上加12 temp>x[i],这表示x数组中有两个或以上相同的数,即x[i]==x[i-1],此时tem原创 2021-04-09 21:38:08 · 88 阅读 · 0 评论 -
1101 Quick Sort (25 分)
1101 Quick Sort (25 分)题意快排中有一种操作,选一个中心点,比中心点小的数都移到他的左边,大的数都移到右边。现在给出一组数,要你找出其中能作为中心点的点。该点的左边没有比它大的数,该点的右边没有比他小的数。解题过程想法很顺利,但AC很艰难。提交卡了一个测试点,输出格式不对????然后就一直调输出格式,多看几遍题目试图找出漏网点,做了很多不必要的改动。后来求助万能的网友发现输出结果数为0的时候需要多输出一个换行。一脸懵???踩坑踩得有点莫名其妙按增序排列也没说清楚是数值增序还原创 2021-04-05 18:48:01 · 91 阅读 · 0 评论 -
1003 Emergency (25 分)
太菜了,我颓了,几个月没写题脑子就不好使了。题目大意给出一个有权无向图,每个点有一个数值,要求你找出某两个点之间的最短路径数量以及最短路经过的点数值加和的最大值。解题过程最短路问题,迪杰斯特拉敲一遍急冲冲的去提交,就过了一个测试点(纯属碰巧),调了半天也改不出个所以然,重新看了一遍题发现看错题目,看到图论理所当然想到求最短路径长度(一定要仔细看题,哭了)。看清题目之后就改咯。改到最后卡了一个测试点,一直想想不到,最后求助万能的网友过了最后一个点得到满分。解题思路链式前向星存图,迪杰斯特拉求最短路原创 2021-03-28 19:50:19 · 86 阅读 · 0 评论 -
1093 Count PAT‘s (25 分)笔记
1093 Count PAT’s (25 分)题意给出一组仅有P A T三个字符的字符串,要求找出有多少个PAT子序列。解题过程之前写过类似题目,所以很顺利写出来了。思路设置三个数组x, y ,z ,分别记录前i个字符中P PA PAT的数量 ,遍历字符串,若此时遍历到第i个字符,遇到P x [ i ] = x [ i - 1 ] , y [ i ] = y [ i - 1 ]; z [ i ] = z [ i - 1 ];即x的个数等于上一个加一,其他的不增加保持原来的数量遇到 A原创 2021-04-04 20:52:04 · 51 阅读 · 0 评论 -
1029 Median (25 分)笔记
1029 Median (25 分)笔记我颓了,一定要看清题目的限制范围。题意给出两个递增的数列,找出这个数列合并之后(并从小到大排好序)的中位数解题过程掉坑里了,最后没忍住看了题解。才发现忽略了long long。开始就是普通合并然后快排找出中位数,没过之后我以为是超时的原因为了避免排序超时,我的想法是尽量减少排序的数的个数。可以发现中位数在一组数据的中间,中位数后面的数其实不会对中位数造成什么影响。把肯定比中位数大的数丢弃,排序的时间就缩短了。显示比较两个数组的中位数,小的哪个设为xm原创 2021-04-05 17:42:38 · 144 阅读 · 0 评论 -
1007 Maximum Subsequence Sum (25 分)
题意给出一组数,找出和最大的连续子序列,如果数列中全为负数,则输出0 第一个数 最后一个数和这个题几乎一样最大子列和问题代码:#include<bits/stdc++.h>using namespace std;int main(){ int list[15000],k,xmax,number=0,first,last,front,flag=1; scanf("%d",&k); for(int i=0;i<k;i++){ scanf("%d",&l原创 2021-03-28 20:21:26 · 43 阅读 · 0 评论 -
1140 Look-and-say Sequence (20 分)
1140 Look-and-say Sequence (20 分)题意有一组数,每个数由0-9组成(我不知道”where D is in [0, 9] except 1“这句话啥意思,下面样例给了个1),后一个数由前一个数的来。规则:前一个数连续的相同的数字缩写为 ”数字+个数“的格式例如:111 后一个为 13123 后一个为 1121312 后一个为 21所以给出第一个数之后按照这个规则写出第n个数思路直接模拟,注意最大为第40个数,这个数有点长,模拟数组开大一点。通过代码原创 2021-06-26 18:08:11 · 46 阅读 · 0 评论 -
1023 Have Fun with Numbers (20 分)笔记
1023 Have Fun with Numbers (20 分)笔记题意给出一个大数,请你求出这个数乘以2后的数。并判断组成这两个数的每位上的数是否一样。如123和321它们都是由 1个1 1个2 1个3 组成.写题过程出题比较顺利,未遇到坑。思路用一个数组 y 记录加倍前后两个数的数字组合 (0~9)加倍前遇到 i 则y [ i ] + 1 ,加倍后遇到 i 则y [ i ] - 1,再用一个数组 z 记录加倍后的数。最后如果两个数用到的数字一样则 y的第0-9项都为零,再输出加倍后的原创 2021-04-05 16:10:57 · 84 阅读 · 0 评论 -
1006 Sign In and Sign Out (25 分)
每次遇到坑我的题都想记下来题目大意机房每天都有人进出,规定第一个进的人开机房门,最后一个出机房的人关机房门,给出机房人员进去信息(进入时间和离开时间和编号),要求你输出每天开门和关门的人的编号。解题过程先是不确定怎么去记录时间(我还想着可能有专门记录时间的数据类型,查资料没找到)还是用以前的老办法。(不好描述,直接看代码)写完代码之后卡了一个测试点。调了半天才出来。有一个点是 0时 就关门了,没想到这个。代码:#include<stdio.h>#include<strin原创 2021-03-28 20:15:29 · 169 阅读 · 0 评论 -
1065 A+B and C (64bit) (20 分)笔记
1065 A+B and C (64bit) (20 分)题意给出一个T,代表T组数据,每组数据给出三个数A B C(A B C 均在正负2^63之间 )要求你判断是否A +B >C解题过程先是试探性地直接比较交了一发,果然卡了数据。之后想用大数模拟,但是时间不够,就想能优化一下,结果居然过了。 当然最保险的还是大数模拟 。思路卡了极限范围数据 当 A B同号且绝对值很大的时候他们相加会超过long long int数据范围 ,需要把这种情况避免。出现这种情况时先让 A 去与 C 比较原创 2021-04-04 21:36:38 · 57 阅读 · 0 评论 -
1104 Sum of Number Segments (20 分)笔记
1104 Sum of Number Segments (20 分)题意给出一个由大于0小于等于1的数组成的集合,要求求出该集合所有连续子串组成的集合中所有元素之和,结果保留两位小数。如集合{0.1,0.2,0.3,0.4},他的连续子串组成的集合为{0.1},{0.2},{0.3},{0.4},{0.1,0.2},{0.1,0.2,0.3},{0.1,0.2,0.3,0.4},{0.2,0.3},{0.2,0.3,0.4},{0.3,0.4}。所有集合元素相加为5.00解题过程写这道题的过程可谓原创 2021-04-06 20:04:24 · 101 阅读 · 0 评论 -
1109 Group Photo (25 分)笔记
1109 Group Photo (25 分)题意给出n个学生的信息(身高和姓名),要求你给这群学生排列一个队形,类似于拍毕业照的队形。队形的要求有以下几点:1.排列有m行,每行有n/m搁学生,多余的学生排到最后一行(最后一行可以不是n/m个学生)2.前排的学生不能比后排高3.一排中最高的站在中间(s/2+1的位置,s为该行的总人数)4.其他人按非递增顺序往两边排列,先左后右(如 1 2 3 4 5 排列后为 2 4 5 3 1)5.身高相同按名字字典序递增排列,名字字典序小的先排。输出最后原创 2021-04-10 19:39:06 · 137 阅读 · 1 评论 -
1043 Is It a Binary Search Tree (25 分)
1043 Is It a Binary Search Tree (25 分)题意给出二叉树的节点数n以及二叉树的前序遍历的权值序列,求该二叉搜索树是不是二叉搜索树或者镜像二叉搜索树,如果是,输出二叉搜索树的后序遍历,(如果是镜像二叉搜索树输出原二叉搜索树的后序遍历)二叉搜索树:左节点小于根节点,右节点大于等于根节点,左右子树分别是二叉搜索树。镜像二叉搜索树:二叉搜索树所有节点的左右节点互换。思路利用前序遍历的权值序列尝试建立二叉搜索树,同时尝试建立镜像二叉搜索树。对建立的树前序遍历,如果遍历结果原创 2021-09-02 10:42:25 · 59 阅读 · 0 评论 -
1099 Build A Binary Search Tree (30 分)
1099 Build A Binary Search Tree (30 分)题意给出一棵二叉树,n节点数,接下来n行代表每个节点(0-n-1)的两个子节点的编号,-1表示子节点不存在。最后给出n个数,要求把数填进该二叉树中,是二叉树成为二叉搜索树,输出二叉搜索树的层序序列。思路因为树有权值与子节点,可以用结构体数组建树。因为二叉搜索树中序序列是单调不减,对n个数从小到大排序,对树进行中序遍历把数填进树的节点中(二叉搜索树中序遍历顺序对应数组中的数顺序遍历)。最后对树进行层序遍历,输出即可。代码原创 2021-09-02 19:33:33 · 61 阅读 · 0 评论 -
1094 The Largest Generation (25 分)
1094 The Largest Generation (25 分)题意第一行给出树的节点个数n和非叶节点个数m。(编号1-n)第二行到第m+1行格式:id k a[1]…a[k]id为节点编号,k为节点子节点个数,后面跟着子节点的编号求节点数最多的一层的节点数和层数(该层是第几层,根节点为第一层)思路先建树,直接用vector数组存即可。然后遍历树找出树的深度方法同1090 Highest Price in Supply Chain (25 分)没有当过子节点的节点为根节点。开一个数组原创 2021-08-23 20:37:06 · 63 阅读 · 0 评论 -
1106 Lowest Price in Supply Chain (25 分)
1106 Lowest Price in Supply Chain (25 分)题意给出一组节点,这些节点可构成一棵树。求树的最浅的叶节点深度以及这样的叶节点的个数。思路和1090 Highest Price in Supply Chain (25 分)类似。只不过要找的是最浅的叶节点。开一个数组标记叶节点,遍历节点找到最浅的叶节点。注意:当只有一个节点时根节点是最浅的叶节点。代码#include<stdio.h>#include<vector>#include&l原创 2021-08-30 23:06:50 · 82 阅读 · 0 评论 -
1056 Mice and Rice (25 分)
1056 Mice and Rice (25 分)题意比较一群老鼠的质量并给它们排名。Ng只老鼠为一组,同组中质量最大的晋级下一组,其他的淘汰。同一轮次淘汰的老鼠排名相同。重复比较直到最后一只老鼠晋级为第一名。给出老鼠的质量和初始排序。最后数量不足一组的按一组进行比较(最后一组数量可能会更少)思路用队列模拟晋级的过程。分别给老鼠分组选出每组质量最大的老鼠加入队列进行下一轮比拼,其他的则淘汰。显然每只老鼠的排名为:在它前面的老鼠数量+1每一轮中晋级的老鼠为组的数量(有多少组就有多少老鼠晋级下一轮)原创 2021-08-15 22:22:46 · 66 阅读 · 0 评论 -
1064 Complete Binary Search Tree (30 分)
1064 Complete Binary Search Tree (30 分)题意给出一组数 n个,用这组数构造一棵完全二叉搜索树,并输出层序遍历序列。完全二叉搜索树:只有最底层可以不满,其余层都是满的二叉搜索树。思路由于二叉搜索树中序遍历序列单调不减,可以通过中序遍历建树。由于是满二叉树,若一个节点编号为 root,左节点编号为 root2 右节点编号为 root2+1。利用该性质可以考虑用数组存储树。对给出的数从小到大排序,递归建树:先建左子树,再建根节点,在建右子树,节点编号大于n则原创 2021-09-02 18:51:28 · 38 阅读 · 0 评论 -
1051 Pop Sequence (25 分)
1051 Pop Sequence (25 分)题意给出一个容量为m的栈,给出n个数字按1-n的顺序进栈,给出一些列出栈顺序判断其中哪些是合法的哪些不合法。分析判断出栈顺序合不合法,用栈模拟进栈出栈。如果给出的出栈顺序不能模拟达到,则是不合法序列。模拟思路:用两个标记,分别记录进栈的数和出栈顺序的下标。假设进栈的数为a,出栈的数为b。将a与b比较,如果a=b,就代表该数进栈且马上出栈。(a代表该数现在就进栈的数,b代表现在该出栈的数)。b的下标往后移一位(原来的已经出栈了,轮到下一个出栈了)如果不原创 2021-08-15 19:51:42 · 79 阅读 · 0 评论 -
1091 Acute Stroke (30 分)
1091 Acute Stroke (30 分)题意给出一个三维图(可以看成是有上下层(不止两层)的迷宫)由0和1构成,定义相邻:一个块a的上下左右前后的块都算和a相邻。给了一张图表示红色的都和蓝色的相邻。相邻为1的块不少于一个数值(给出)时它们构成一个核心区,求出所有核心区中块为1的块的数量。(诺干个1相邻,如果这些1大于一定数量时这些1的区域就为核心区)如111110 数量大于3时组成核心区 这五个1就构成一个核心区。块的数量为 5思路二位迷宫的升级版,和二维迷宫类似。设1为有效块,以每个原创 2021-08-22 14:28:48 · 67 阅读 · 0 评论 -
1020 Tree Traversals (25 分)
1020 Tree Traversals (25 分)题意给出二叉树的n个节点以及后序遍历序列和中序遍历序列,求层序遍历序列。思路利用后续遍历和中序遍历得到还原出二叉树(前序),再进行层序遍历。这里采用递归建树。由后序遍历性质知后序序列最后一个节点为该序列的根节点root,即可以建立根节点。通过root可以在中序序列中找到树的左子树区间 根节点 右子树区间。根据区间再构造左右子树…构造树的每个节点都是把它当作根节点去建立的。每次建树之前判断是否还存在左右节点。递归递归过程:设post为后序原创 2021-08-22 17:32:50 · 69 阅读 · 0 评论 -
1004 Counting Leaves (30 分)
1004 Counting Leaves (30 分)题意族谱就像一棵树,给出n 节点数,m 有孩子的节点数,接着m行每行 id (节点编号) k(孩子数)id1 id2 …idk (孩子编号)求族谱树每一层没有孩子的节点数量(根节点算第一层)思路通过vector建树,通过队列遍历树,vis数组记录叶结点数,设置order数组储存个节点在第几层,在遍历过程中可更新记录order,当遍历一层后输出每层叶结点的数量即可。注意输出格式末尾没有空格。代码#include<stdio.h>原创 2021-08-31 22:48:50 · 75 阅读 · 0 评论 -
1103 Integer Factorization (30 分)
1103 Integer Factorization (30 分)题意给出三个正整数,N,K , P 要求找到一组数使得 N = n[1]^P+n[2] ^P+…n[K] ^P,且n[1]+n[2]+…n[k]最大(有多组这样的数时最大的一组),有多组一样大时选字典序最大的一组。没有这样的组合时输出 “Impossible”思路可以考虑深度优先搜索找出所有组合,然后从中选出符合要求的组合。考虑到 n[i]^p<=N,可以得到n[i]的范围。用数组把n[i]可能取得的数存起来,然后dfs找到这原创 2021-08-21 17:18:00 · 126 阅读 · 0 评论 -
1090 Highest Price in Supply Chain (25 分)
1090 Highest Price in Supply Chain (25 分)题意给出一系列节点,这些节点可构成一棵树,求树的深度以及最深结点的个数。第一行给出三个数,节点个数n(节点编号从0 - n-1) 初始价格p,每层增加百分比r(每层增加%r)。第二行给出n个数a[i],表示编号为 i 的父节点为a[i]。注意并不一定是二叉树。思路由于不用考虑节点的点权以及子节点数量不确定可以用vector数组存树。下标代表节点编号,向量中存储子节点编号。找树的深度:可以通过bfs遍历树(层序遍原创 2021-08-23 17:28:29 · 89 阅读 · 0 评论 -
1052 Linked List Sorting (25 分)
1052 Linked List Sorting (25 分)题意给出一系列节点,和一个地址,要你给以该地址为首地址的链表按数据域的数据从小到大重新排序。输出最终参与排序的节点个数以及排序后的第一个结点的地址思路先找出以给出地址为首地址的链表的所有节点,再对节点以数据部分从小到大排序,最后输出即可。用静态链表的方式存储节点,(参照1074 Reversing Linked List (25 分))给所有节点初始化 data和 order为无穷大,存储完结点之后通过头节点遍历我们的链表并给链表中每原创 2021-08-20 19:15:50 · 59 阅读 · 0 评论 -
1053 Path of Equal Weight (30 分)
1053 Path of Equal Weight (30 分)题意给出一棵树,n节点数 m非叶节点数 s总和。各节点的权重weight[0]…weight[n-1]给出m行id k x[1]…x[k] id为节点编号 k为子节点数 x为子节点编号找到一条从根节点到叶节点的路径,路径上的节点权值之和等于s。有多条按权重升序输出。思路结构体静态建树,path记录存储路径,vis记录叶节点。dfs遍历树,找到所有从根节点到叶结点的路径,并找到其中权重==s的路径,输出路径中节点的权重。代码原创 2021-09-01 12:11:10 · 47 阅读 · 0 评论 -
1032 Sharing (25 分)
1032 Sharing (25 分)题意给出两个用链表存储的字符串(每个节点存储一个字母)即给出一系列无序的节点,请你找出两个字符串第一个相同节点的地址,如果没有输出-1.思路大致同1074 Reversing Linked List (25 分)建立一个标记数组,下标代表节点地址。初始化标记为零,给在每个链表的节点加一个标记。如在第一个链表,标记加1,在第二个链表标记又加1,标记为2的即为两个链表公共的节点。建立两个链表分别表示连个字符串,对两个链表分别进行操作。由于只需找出两个字符串第一个原创 2021-08-20 13:49:59 · 41 阅读 · 0 评论 -
1097 Deduplication on a Linked List (25 分)
1097 Deduplication on a Linked List (25 分)题意给出一系列节点,和一个地址,找到以改地址为首地址的链表,并把链表中数据部分绝对值像同的节点,只保留第一个,其他的从该列表中删去。删去的节点按原来的顺序组成新的链表如15–> -15 -->15 -->20 -->15 变为 15–>20 -15 --> 15 -->15 。思路开两个结构体数组,先找到我们要找的链表存在第一个链表中,方法同1074 Rev原创 2021-08-20 20:42:15 · 51 阅读 · 0 评论 -
1102 Invert a Binary Tree (25 分)
1102 Invert a Binary Tree (25 分)题意给出二叉树各个节点的左右子树(不存在的用 - 表示),反转该树的左右节点,要求输出该树反转后的层序遍历序列和中序遍历序列。(树节点编号从0 - n-1)思路先通过给出的各个节点建立树。由于给的是节点的左右子节点,这里采用静态写法建立二叉树会更简单一些。建立btree结构体数组,下标表示节点编号。通过给出的每个节点的左右子节点建树。根节点没有出现在给出的数据中(根节点不可能作为某个节点的子节点),所以在处理数据时标记一下就可以找到根原创 2021-08-22 23:33:38 · 53 阅读 · 0 评论 -
1074 Reversing Linked List (25 分)
1074 Reversing Linked List (25 分)题意给出n个节点,每个节点包括地址,数据,和下一节点地址。给出首地址和节点个数以及k , 每k个节点进行一次反转,不足k个不反转。比如原link为 1 2 3 4 5 6 7 ,k 为 2则反转之后为 2 1 4 3 6 5 7按顺序输出反转之后的节点。思路因为给出的是一系列无序节点,先排好序,用静态链表的方式组成一个有序地序列。可以用结构体存储每个节点,结构体包括 地址 数据 下一个节点地址 以及一个真实的序号orde原创 2021-08-19 21:30:54 · 159 阅读 · 0 评论 -
1079 Total Sales of Supply Chain (25 分)
1079 Total Sales of Supply Chain (25 分)题意题意基本同1090 Highest Price in Supply Chain (25 分)本题求的是每个叶节点深度,并且叶节点有权值。第一行给出节点个数n,价格p,价格增长百分比r。第二到n+1行每行格式,行数代表节点编号,从0开始k!=0,该节点为非叶节点 k a[1]…a[k]k==0 该节点为叶节点 0 xa为k的子节点,x为该叶节点的权值。思路大致思路同1090 Highest Pri原创 2021-08-23 19:27:29 · 66 阅读 · 0 评论 -
1086 Tree Traversals Again (25 分)
1086 Tree Traversals Again (25 分)题意给出二叉树的前序和中序遍历序列,求后序遍历序列。思路方法同1020 Tree Traversals (25 分)。通过前序序列和中序序列构建二叉树。前序序列第一个为根root,查找中序序列root的位置,可以得到左右子树结点的数量,递归建树。输出后序序列,注意结尾没有空格。后续遍历二叉树 :先左子树 再右子树,最后输出根节点。代码#include<stdio.h>#include<iostream&原创 2021-08-22 20:39:27 · 49 阅读 · 0 评论 -
1021 Deepest Root (25 分)
1021 Deepest Root (25 分)题意给出一个无向图,如果图是联通的,以图的某个节点当作根节点则图可看作是一棵树,求你找出最使树深度最大的节点。若有多个这样的节点则从小到大输出。图不是联通的则输出Error: K components K为图的连通块数量。思路可以先判断图是否连通还是有多个连通块。通过并查集实现。若联通,则从任一点v开始遍历图,得到离v最远的节点的集合Q。再从集合Q中任一点s遍历图,得到离s点最远的节点结合W,满足要求的节点为Q与W的并集。并查集:用一个数组原创 2021-09-04 22:55:03 · 74 阅读 · 0 评论 -
1013 Battle Over Cities (25 分)
1013 Battle Over Cities (25 分)题意给出一张无向图,有n个节点,m条边。给出k个操作,每个操作为删除图中一个节点,剩下的图需要再建几条边才能连通。思路用vector数组存图,在对删除节点后的图进行深搜找到连通块,若有s个连通块则需要在建s-1条路。由于只需要找连通块,可以用栈来实现深搜。在遍历过程中标记遍历过的节点,每个节点只需要遍历一次。注意题目操作中删除的节点不记录。代码#include<stdio.h>#include<string.h&g原创 2021-09-04 20:25:44 · 44 阅读 · 0 评论 -
1105 Spiral Matrix (25 分)
1105 Spiral Matrix (25 分)题意给出一组N个数,把这N个数填入一个m*n的螺旋矩阵里。该螺旋矩阵是从外一圈一圈向最中心的数单调不增。第一个数在最外圈左上角。而 m * n = N,m>=n且m与n应该是所有符合要求中相差最小的一组m,n。input1237 76 20 98 76 42 53 95 60 81 58 93output98 95 9342 37 8153 20 7658 60 76思路一道稍微麻烦的模拟题。思路很容易想到,先找到符合要求的m,原创 2022-02-10 12:46:43 · 498 阅读 · 1 评论