天梯赛
练习
向上的yyy
路漫漫其修远兮,吾将上下而求索
展开
-
L2-042 老板的作息表 java c++ 自定义排序
新浪微博上有人发了某老板的作息时间表,表示其每天 4:30 就起床了。但立刻有眼尖的网友问:这时间表不完整啊,早上九点到下午一点干啥了?本题就请你编写程序,检查任意一张时间表,找出其中没写出来的时间段。输入格式:输入第一行给出一个正整数 N,为作息表上列出的时间段的个数。随后 N 行,每行给出一个时间段,格式为:hh:mm:ss - hh:mm:ss其中 hh、mm、ss 分别是两位数表示的小时、分钟、秒。第一个时间是开始时间,第二个是结束时间。题目保证所有时间都在一天之内(即从 00:00:0.原创 2022-04-29 18:16:29 · 340 阅读 · 0 评论 -
L2-024 部落 c++ 并查集
分析并查集的使用:https://blog.csdn.net/weixin_51995229/article/details/124313167?spm=1001.2014.3001.5501此题需要求所有部落的人数,那么用一个set集合去放所有的人即可,在初始化f数组时,我们不知道总人数的个数,可以直接初始化到最大值;求不相交的部落的个数,就是连通分量数,以及两个人是否有关系,可以参考这个题的分析:https://blog.csdn.net/weixin_51995229/article/de..原创 2022-04-26 18:28:10 · 1030 阅读 · 0 评论 -
L2-021 点赞狂魔 c++结构体排序
分析用一个结构体去存有效的点赞数、总共的点赞数;然后根据题意进行排序,输出;找出数量最大的前3名,那么就要根据有效点赞数进行递减排序:return p1.cnt > p2.cnt(第一个位置的数比第二个大,那么就是递减);如果有并列,则输出标签出现次数平均值最小的那个,平均值就是总数除以有效值数,当有效值相同,那么就是分母相同,分子越小那么平均值就越小,所以我们让总数进行递增排序:return p1.sum < p2.sum;(第一个数小于第二个数,那么就是递增);#include..原创 2022-04-26 16:53:35 · 1063 阅读 · 0 评论 -
L2-014 列车调度 (25 分) c++ set二分
分析实际上就是最长递增子序列问题;轨道的最后面那个编号要为最小的,然后输入的k,要放在某个轨道中编号最小的那个列车后面,然后更新这个轨道可以放的最小编号;如果不存在这样的轨道,需要新开一条轨道;强搜(有一个测试点超时)用一个cnt去记录轨道数,不过最后输出a的size,都是一样的道理,cnt可有可无;数组a存放每个轨道最小的编号,这样输入的k就可以判断是否可以加在某一条轨道的后面,如果不能的话,f打一个标记,重新建一条轨道,把这个k加进去;#include <bits/stdc++.h..原创 2022-04-22 21:57:58 · 925 阅读 · 0 评论 -
L2-010 排座位 (25 分) c++ 并查集
分析二维数组表示,会有测试点过不去二维数组去表示他们的关系,在判断:x和y这两个人时,如果他们之间有敌对,然而也有共同的朋友,这个地方的时候,我们可以去找所有和x、y两个点有关系的人,通过一层循环,当某个人j同时满足和x存在盆友关系,满足条件;第二个测试点过不去,因为会出现,朋友的朋友也是朋友,所以这样写有bug,所以可以考虑并查集;#include <bits/stdc++.h>using namespace std;int a[105][105];int main(..原创 2022-04-22 20:52:14 · 842 阅读 · 2 评论 -
L2-035 完全二叉树的层序遍历 (25 分) java c++
import java.util.Scanner;public class Main { static int n, cnt = 1; static int[] a = new int[35]; static int[] ans = new int[35]; static void dfs(int u) { if (u > n) return; dfs(2 * u); dfs(2 * u +.原创 2022-04-22 19:54:08 · 1120 阅读 · 0 评论 -
L2-017 人以群分 (25 分) c++ sort
分析读懂题就好了,就是把数组排序后,前半段为内向型的人,后半段为外向型人;要求两类人群的规模尽可能接近,即如果n为偶数个人,外向、内向的人数各一半,然后进行求和求差;然后而他们的总活跃度差距尽可能拉开,即n为奇数时,要尽量拉开活跃度,所以中间那个人要归类到外向人,这样用一个更大的减去更小的,才会拉开活跃度;#include<bits/stdc++.h>using namespace std;int a[100005];int main() { int n; cin &..原创 2022-04-22 17:16:58 · 603 阅读 · 0 评论 -
L2-015 互评成绩 (25 分) c++ sort
分析就是个排序问题,可以用c++的sort函数;需要注意最小值要初始化到最大,最大值初始到最小,刚开始都错误的初始化为0了;看清题目输出,最后得分最高的M个成绩,递增输出,我刚开始顺序的输出了这m个人的成绩,哎读题还是认真点…#include<bits/stdc++.h>using namespace std;int arr[10000 + 5];int main() { int n, k, m; cin >> n >> k >> m.原创 2022-04-22 16:37:46 · 173 阅读 · 0 评论 -
L2-037 包装机 (25 分) c++ STL
分析stack的常用方法 参考博主的:https://blog.csdn.net/weixin_52341477/article/details/119250698queueset此题的筐就是栈,上面的轨道就是队列,然后来模拟;当筐已经满了,但仍然有某条轨道的按钮被按下时,系统应强制启动 0 号键,先从筐里抓出一件物品,再将对应轨道的物品推落。也就是输入的操作是0,然后如果没满的话,直接进栈,如果满了,就需要先出栈栈顶元素,然后再进栈;==坑点:当筐满了(栈满...原创 2022-04-22 16:14:10 · 783 阅读 · 0 评论 -
L2-013 红色警报 (25 分) c++ 并查集 连通分量数
【代码】L2-013 红色警报 (25 分) c++ 并查集 连通分量数。原创 2022-04-22 13:40:06 · 896 阅读 · 0 评论 -
L2-011 玩转二叉树 (25 分) java
分析通过先序序列、中序序列还原二叉树 可参考:https://blog.csdn.net/weixin_51995229/article/details/124298623二叉树的层次遍历可参考:https://blog.csdn.net/weixin_51995229/article/details/124197521此题就是先通过先序序列、中序序列还原二叉树 ,然后层次遍历此题需要镜面反转,是指将所有非叶结点的左右孩子对换。所以我们在遍历的时候,先遍历右子树即可;import java..原创 2022-04-21 22:03:53 · 730 阅读 · 0 评论 -
L2-009 抢红包 (25 分) c++结构体定制排序
分析此题就是创建一个结构体,然后来定制排序;需要注意如果结构体类型的数组开在main方法内的话,需要进行price、cnt的初始化,不能忘记;也可以在main的外部创建数组,就不用进行初始化了;#include<bits/stdc++.h>using namespace std;struct person { int num; int cnt;//抢到红包个数 int price;};bool cmp(person p1, person p2) { if (..原创 2022-04-21 21:28:46 · 392 阅读 · 0 评论 -
L2-008 最长对称子串 (25 分) c++
分析一个i指向子串的第一个位置索引,一个j指向子串的最后的位置的索引,这段子串的长度为j-i+1;然后我们判断这段子串是否对称,用一个函数去判断,如果当前判断的字符串长度还没前面已经算出来的ans大,就没必要判断,直接continue;需要注意子串可能只有一个一个字符,所以j不能从i+1开始,要从i开始;主要c++的substr函数的第二个参数为为当前截取的字符串的长度,和java不一样,java是区间范围;#include<bits/stdc++.h>using namesp.原创 2022-04-21 20:34:44 · 1075 阅读 · 0 评论 -
7-25 朋友圈 (25 分) java 并查集
分析此题就是并查集,就是根据祖先的(俱乐部)不同,分成了许多小集合,每个小集合可以理解为一个俱乐部,用cnt数组去记录每个集合的孩子数量,找出cnt中某个位置的值最大,那么俱乐部的最大人数就求出来了;需要注意和上一题的模板题:亲戚,稍微有点变化,此题需要依次合并多个人的关系,上题是一对一对的合并,而这一题,一行多个结点属于一个关系,比如1,2,3为同一集合,那么我们可以直接把1和2连通起来,再把把1和3连通起来,就可以让这一行的关系都连了起来;在处理哪个部落的人最多是多少的问题,我们知道并查集是根.原创 2022-04-21 17:55:00 · 541 阅读 · 0 评论 -
L2-005 集合相似度 (25 分) java c++
分析java超时import java.util.ArrayList;import java.util.HashSet;import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); //一维放的集合,二维放的集.原创 2022-04-20 20:40:41 · 535 阅读 · 0 评论 -
L2-006 树的遍历 (25 分)
分析关于通过后序、中序创建二叉树,请看:https://blog.csdn.net/weixin_51995229/article/details/124301027需要注意数组开的大小要正好为结点数,因为在构造时候用的是数组的长度作为的子树区间终点;也可以在构造方法中多加一个参数,用来指定结点的个数,这样可以随意创建数组的大小;关于二叉树的层次遍历,请看:https://blog.csdn.net/weixin_51995229/article/details/124197521此题我们将二叉.原创 2022-04-20 17:32:55 · 610 阅读 · 0 评论 -
L2-002 链表去重 (25 分) java c++
思路(java 超时,c++可以过)利用结点的地址,当做数组的索引,开一个存放结点键值的数组data,在开一个存放结点下一个结点地址的数组p,具体含义可见注释;由于键值的绝对值不能重复,所以我们用一个vis数组去标记每个已经出现的数,用来处理重复的结点;用两个容器去存放删去重复元素的新链表,以及被删去的结点的链表;注意这两个容器存的是结点的地址,通过这个结点的地址和data数组、p数组就可以获取到键值的信息、下一个结点地址的信息;结点存放在这些数组后,我们通过p数组去处理这个链表,通过一个循环..原创 2022-04-19 18:47:26 · 1166 阅读 · 0 评论 -
L1-050 倒数第N个字符串 (15 分) java
分析import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int l = sc.nextInt();//该26进制的位数 int n = sc.nextInt();//求倒数第n项的字符串 //取值也是从aaa~zzz,可以理解为26进制.原创 2022-04-19 18:12:24 · 370 阅读 · 0 评论 -
L1-080 乘法口诀数列 (20 分) java
分析用一个死循环,让他们一直操作,当满足容器中的个数超过要求输出的个数时候,结束循环;用一个指针p去记录容器第一个数 的下标,依次让他与下一个数相乘,得到的结果如果是两位数(a<=9,故计算出来的结果不超过两位数),就把他拆分后放入容器(拆分时要注意先把高位放进去,再放低位),否则直接放进容器中;进行依次操作后,让p++,然后继续重复操作下去;import java.util.ArrayList;import java.util.Scanner;public class Main {.原创 2022-04-19 14:57:13 · 240 阅读 · 0 评论 -
L1-071 前世档案 (20 分)
分析解法一利用 二叉树的性质,左孩子为根节点的值的二倍,右孩子的值为根节点的二倍+1;import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int m = sc.nextInt(); w..原创 2022-04-18 19:52:20 · 718 阅读 · 0 评论 -
L1-059 敲笨钟 (20 分)
分析需要注意此题是前半句的最后一个单词和后半句的最后一个单词都要是ong结尾;不能直接获取每句后两个单词后,直接分别contains去判断是否包含ong,这样有bug,比如说最后一个单词为ongx.,那么用contains就会被误认为是押韵;所以我们需要逐个去分析后三个字符(不包括标点符号),或者截取后三个字符来判断是否是ong;注意此题,前半句和后半句最后一个单词要满足 >=4个字符,因为这里的前半句最后一个单词为"xxx,",后半段是“xxx.”另外我的代码有点冗余,可以利用subs..原创 2022-04-18 09:04:57 · 405 阅读 · 0 评论 -
L1-046 整除光棍 (20 分) java
思路我们可以反着思考,如果x*s为光棍,那么光棍一定能够整除x,那么我们可以枚举光棍,也就是1、11、111、1111、11111…;如果某个光棍可以整除x,那么这个光棍除以x,就是我们想要的答案;光棍我们可以用String来保存,不断向后面+1,至到满足条件;光棍的长度就是字符串的长度;import java.math.BigInteger;import java.util.Scanner;public class Main { public static void main(.原创 2022-04-16 18:39:47 · 590 阅读 · 0 评论 -
L1-043 阅览室 (20 分) java
分析思路:只有S没有E,或者只有E没有S的纪录,系统应能自动忽略这种无效纪录。2.1 S的话就让他直接借,记录下这本书的借出时间,因为此题是当天多次借同一本书,以最后一次借书时间为准;2.2 E的话,就是还书,所以当我们在还书的时候,需要看这本书是否属于被借出,然后来还的;所以用一个vis数组来标记书的情况,vis[i]=1,说明第i本书已被借;用一个time数组去记录每本书借出的时间,因为当这本书还回来的时候,需要计算这本书的阅读时间;我们用cnt来记录这一题读者阅读几本书,通过样例发..原创 2022-04-16 16:24:45 · 668 阅读 · 0 评论 -
L1-039 古风排版 (20 分) java
分析我们可以发现,字符串在矩阵中,是从第一列,最后一行,倒着向上打印,所以我们可以考虑用一个二维数组去保存这个矩阵;首先我们知道输出为每列n行,要判断输入的字符串需要用几列,由于可能最后一列可能不足n个字符,所以我们需要扩列,多加一列去放多余的字符;多加一列的时候,我们可以算出来剩余的字符在第一列占几个位置,数组中第一列剩余的多少个空位置,用空格去加进去;然后我们倒着去遍历字符串,用一个cnt标记字符串最后一个字符的索引;在填二维数组的时候,我们采用倒着去填充,也就是说从第一列开始,然后第二列.原创 2022-04-16 14:47:12 · 508 阅读 · 0 评论 -
L1-027 出租 (20 分) java
分析用了两个容器分别保存arr和index;需要对arr进行降序排序,用一个匿名内部类,创建一个比较器即可;arr中保存的是所出现的电话号码,通过标记,添加进去即可index的获取,可通过每位电话号码的值在arr数组中的索引添加进index集合中即可import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.Scanner;public c..原创 2022-04-16 09:15:10 · 658 阅读 · 0 评论 -
L1-023 输出GPLT (20 分)
错误思路刚开始思考为四个状态互换那种题了,类似于这题思路:https://blog.csdn.net/weixin_51995229/article/details/123929873?spm=1001.2014.3001.5502;但这种方法是错误的,因为题目要求不是GPLT连着也要顺序输出,我的循环结束条件为当所有字符都输出,所以会造成死循环;import java.util.Scanner;public class Main { public static void main(St.原创 2022-04-16 08:52:53 · 149 阅读 · 0 评论 -
L1-020 帅到没朋友 (20 分) java c++
分析第一次只过了前两个测试点,由于没有考虑id为00开头,没有考虑到输入的k为1时,朋友圈只有自己,属于没有朋友;(要理解这句话,没有朋友的人可以是根本没安装“朋友圈”,也可以是只有自己一个人在朋友圈的人。)用HashSet集合来保存所有有朋友的id,然后用LinkedList保存想要查询的人的id,通过vis数组来标记所查找的人是否在 有朋友的id集合中,如果不在,标记为1;遍历数组,把数组值为1,也就是没有朋友的人放在LinkedHashSet集合中,最后如果集合长度为0,那么就是都有朋友,否则.原创 2022-04-15 21:52:47 · 1178 阅读 · 0 评论 -
L1-006 连续因子 (20 分)
分析求连续的因子的个数,所以要从2开始遍历,用ans_begin 来记录连续因子的开始位置,用cnt记录连续因子的个数;循环到sqrt(n),不然会超时循环中,我们要用一个j,从i开始,不断往下探索吗看他们有几个连续因子,如果count比当前cnt的大,即遇到了新的最长连续因子要判断输入的n是否为负数,也就是cnt=0的情况;import java.util.Scanner;public class Main { public static void main(String[].原创 2022-05-03 22:10:29 · 170 阅读 · 0 评论 -
L1-002 打印沙漏 (20 分)
分析import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); char c = sc.next().charAt(0); int row = 0;//中间那一个符号的上边有几行 f..原创 2022-03-18 13:58:49 · 232 阅读 · 0 评论