c++
北边小洛
这个作者很懒,什么都没留下…
展开
-
pta-模拟EXCEL排序
Excel可以对一组纪录按任意指定列排序。现请编写程序实现类似功能。输入格式:输入的第一行包含两个正整数N(≤10^5) 和C,其中N是纪录的条数,C是指定排序的列号。之后有 N行,每行包含一条学生纪录。每条学生纪录由学号(6位数字,保证没有重复的学号)、姓名(不超过8位且不包含空格的字符串)、成绩([0, 100]内的整数)组成,相邻属性用1个空格隔开。输出格式:在N行中输出按要求排序后的结果,即:当C=1时,按学号递增排序;当C=2时,按姓名的非递减字典序排序;当C=3时,按成绩的非递减排原创 2021-01-26 21:30:38 · 317 阅读 · 0 评论 -
二叉树的建立与遍历
因为太懒了就直接上代码吧遍历方法包含前、中、后序遍历以及层次遍历。#include<iostream>#include<queue>using namespace std;typedef struct Btree { int val; struct Btree* lchild; struct Btree* rchild; Btree():val(0),lchild(nullptr),rchild(nullptr){}}node;int luo_time = 1;原创 2021-04-14 20:02:40 · 105 阅读 · 0 评论 -
pta-电话聊天狂人
原题链接:https://pintia.cn/problem-sets/15/problems/722思路:用map(map<string,int>)解题,使用map的查找函数进行判断是否已经存在该号码,存在加上一次,不存在加上该元素,并且赋值为1,最后再遍历两遍map,第一遍找出最大次数的号码,第二遍找出相同次数的号码个数,并且修改我们的号码(号码最小的并且是次数最多的)。易错点:不能在最后只遍历一遍map,同时修改“最大”次数和号码,因为在过程当中的次数并不是真正的最大次数,也不能修改原创 2021-01-23 17:43:06 · 241 阅读 · 0 评论 -
洛谷-最大子段和(c++)
思路:求出数组中以某一位为最后一位的子段和,最后依次遍历该求出的数组,找出其中的最大值,即为我们所求的答案。部分代码://x数组为输入的数组//这个for循环就可以求得以其中某一位为子段的最后一位的最大值。 for(int i=1;i<n;i++){ if(x[i-1]>0){ x[i]=p[i]+x[i-1]; } else{ x[i]=p[i]; } }完整.原创 2021-03-13 23:40:21 · 447 阅读 · 0 评论 -
蓝桥杯-国王的烦恼(c++)
问题描述:输入输出样例:思路:首先我们对桥进行排序(根据桥的时间排序,时间长的放在前面),然后遍历每一座桥,若桥刚好连接了两个不为同一祖先的两座城市,而且该桥的时间与我们每次更新的时间不一样时,(若存在两座桥的时间相同且刚好连接了跟上述说法中一样的两座城市,没有这一判断条件我们便会得到错误答案。)我们对答案加一,并且在此更新我们维护的时间。这也是为什么在开始阶段我们要根据每一座桥的时间来对桥进行排序的原因。注意事项:1.我们在判断两座城市是否是刚联通时(即判断的这座桥连接了这两座城市),我们应原创 2021-03-08 09:42:52 · 242 阅读 · 0 评论 -
pta-汉诺塔的非递归实现
借助堆栈以非递归(循环)方式求解汉诺塔的问题(n, a, b, c),即将N个盘子从起始柱(标记为“a”)通过借助柱(标记为“b”)移动到目标柱(标记为“c”),并保证每个移动符合汉诺塔问题的要求。输入格式:输入为一个正整数N,即起始柱上的盘数。输出格式:每个操作(移动)占一行,按柱1 -> 柱2的格式输出。输入样例:3输出样例:a -> ca -> bc -> ba -> cb -> ab -> ca -> c思路:(原创 2021-01-24 14:58:15 · 357 阅读 · 0 评论 -
洛谷-程序自动分析
题目描述:输入格式:输出格式:输入输出样例:输入样例1:221 2 11 2 021 2 12 1 1输出样例1:NOYES输入样例2:231 2 12 3 13 1 141 2 12 3 13 4 11 4 0输出样例2:YESNO思路:这个题是典型的并查集的题目,我们先处理所有的e=1的情况,将所有的相等的情况并在一起,再处理e=0的时候,当我们出现矛盾(即我们已经将某两个数字并在了一起,但是这两个是不能相等的)时,我们便输出NO原创 2021-02-05 17:01:39 · 297 阅读 · 0 评论 -
pta-还原二叉树
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。输入格式:输入首先给出正整数N(≤50),为树中结点总数。下面两行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区别大小写)的字符串。输出格式:输出为一个整数,即该二叉树的高度。输入样例:9ABDFGHIECFDHGIBEAC输出样例:5思路:只要中序的string还有数据(即size>0),我们便执行操作。并且记录最大的一个高度(高度从1开始记录)。最后输出我们求出的答案。#include原创 2021-01-26 10:44:54 · 744 阅读 · 2 评论 -
蓝桥杯最大子矩阵(c++)
思路:利用前缀和将每一列进行处理:即第m行第n列的元素为第0行第n列元素至第m行第n列元素之和,然后就开始划分起点和终点,将其中的第i行至第j行的元素之和作为一个元素,相当于建立了一个新数组,只是这个数组的每一个元素都是原先数组的某一列元素的部分元素和。最后我们对新数组进行求最大子矩阵的操作,最终得到原数组的最大子矩阵。不会一维数组的最大子段和的可以点击下面的传送门。传送门完整AC代码:#include<iostream>#include<cmath>#inclu...原创 2021-03-13 23:44:58 · 690 阅读 · 0 评论 -
天梯赛-玩转二叉树
L2-011 玩转二叉树 (25分)给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。这里假设键值都是互不相等的正整数。输入格式:输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其中序遍历序列。第三行给出其前序遍历序列。数字间以空格分隔。输出格式:在一行中输出该树反转后的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。输入样例:71 2 3 4 5 6 74 1 3 2原创 2021-01-14 15:39:02 · 241 阅读 · 0 评论 -
牛客网-小猿的依赖循环(dfs)
题目:**思路1:使用并查集让具有依赖的拥有同一个祖先,如果中间出现某两个人已经有相同祖先了,我们就可以知道产生了循环依赖。 **但是这个思路是错的,因为a对b有依赖不代表b对a有依赖,并查集却让a和b互相依赖了,所以并不能够这样做。思路2:使用dfs优先遍历搜索来查看是否产生了循环。注意事项:不能够直接dfs(0),即所有的未走过的节点都要进行一次dfs,即图中的连通图的dfs遍历方式。即会有一种情况产生:a、b、c之间没有产生循环依赖,且a、b、c都没有依赖d和e,但是d和e却产生了依赖。但是原创 2021-04-08 10:44:52 · 220 阅读 · 0 评论 -
pta-Windows消息队列
原题链接:https://pintia.cn/problem-sets/15/problems/841原题AC代码:#include<iostream>#include<queue>using namespace std;typedef struct ORDER { string nm; int ji; bool operator <(const struct ORDER& a)const { //上面这行最后的const关键字需要加进去,否则会编译原创 2021-01-23 13:53:01 · 299 阅读 · 0 评论 -
pta-旅游规划
有了一张自驾旅游路线图,你会知道城市间的高速公路长度、以及该公路要收取的过路费。现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径。如果有若干条路径都是最短的,那么需要输出最便宜的一条路径。输入格式:输入数据的第1行给出4个正整数N、M、S、D,其中N(2≤N≤500)是城市的个数,顺便假设城市的编号为0~(N−1);M是高速公路的条数;S是出发地的城市编号;D是目的地的城市编号。随后的M行中,每行给出一条高速公路的信息,分别是:城市1、城市2、高速公路长度、收费额,中间用空格分原创 2021-01-24 15:06:06 · 501 阅读 · 0 评论 -
短学期 质数筛
void prime(){ for(i=2;i<=500;i++) if(!b[i]) for(j=2;i*j<=1000;j++) b[i*j]=1;}//筛法依次去除2,3,4……的倍数的数,剩下的就是质数原创 2021-01-23 17:44:51 · 57 阅读 · 0 评论 -
洛谷-关押罪犯
题目描述:S 城现有两座监狱,一共关押着 NN 名罪犯,编号分别为 1-N1−N。他们之间的关系自然也极不和谐。很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突。我们用“怨气值”(一个正整数值)来表示某两名罪犯之间的仇恨程度,怨气值越大,则这两名罪犯之间的积怨越多。如果两名怨气值为 cc 的罪犯被关押在同一监狱,他们俩之间会发生摩擦,并造成影响力为 cc 的冲突事件。每年年末,警察局会将本年内监狱中的所有冲突事件按影响力从大到小排成一个列表,然后上报到 S 城 Z 市长那里。公务繁忙的 Z原创 2021-02-04 21:16:44 · 192 阅读 · 0 评论 -
字典序
题目:基本思路:既然是按字典序进行排列,即以1开头的数字必定在以2开头的数字前面,以2开头的数字必定在以3开头的数字前面。且数字字长相同的数字,短的是出现在长的后面的,例如:10先出现,100后出现。找出来了每一个以某一数字开头的数字且小于给出数字的个数之后,我们可以利用这个不断压缩范围,直至找到我们需要求的数字。剩下代码实现部分的讲解就在代码当中进行讲解。求以某一个数字开始并且小于某一个数字开始的数字个数方法:方法一:int getNum(int n, int k)//不大于n的以k为开始的原创 2021-04-10 15:32:56 · 204 阅读 · 0 评论 -
pta-修理牧场
农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数Li个长度单位,于是他购买了一条很长的、能锯成N块的木头,即该木头的长度是Li的总和。但是农夫自己没有锯子,请人锯木的酬金跟这段木头的长度成正比。为简单起见,不妨就设酬金等于所锯木头的长度。例如,要将长度为20的木头锯成长度为8、7和5的三段,第一次锯木头花费20,将木头锯成12和8;第二次锯木头花费12,将长度为12的木头锯成7和5,总花费为32。如果第一次将木头锯成15和5,则第二次锯木头花费15,总花费为35(大于32)原创 2021-01-25 15:19:30 · 217 阅读 · 0 评论 -
力扣(移除元素)c++
题目跳转链接题目大意:注意框住部分,题目允许我们改变数组的顺序。基本思路:用两个下标分别表示在此之前的数字没有值为val的,另一个是从后往前的不是val值的下标。代码:class Solution {public: int removeElement(vector<int>& nums, int val) { int lf,rg,sz=nums.size(); lf=0,rg=sz-1; while(lf<=rg原创 2021-04-19 11:28:59 · 164 阅读 · 0 评论 -
力扣-无重复字符的最长子串(c++)
题目链接题目截图:基本思路:我们可以从中发现我们当我们开始的起点越靠后,与其发生冲突的终点越靠后,拿lf代表左边起点,rg代表右边终点时,若lf1<lf2,那么rg1<=rg2(这里是有一个等号的)。同时我们利用set来判断我们的窗口,也就是rg和lf之间的部分当中是不是有重复部分,若有删除起点,同时起点向后移动。函数实现代码:class Solution {public: int lengthOfLongestSubstring(string s) {原创 2021-04-19 19:43:00 · 170 阅读 · 0 评论