数据结构和算法
数据结构和算法
MInNrz
猪事顺利^(oo)^
展开
-
1085 PAT单位排行
输入格式: 输入第一行给出一个正整数 N(≤10 5 ),即考生人数。随后 N 行,每行按下列格式给出一个考生的信息:准考证号 得分 学校 其中准考证号是由 6 个字符组成的字符串,其首字母表示考试的级别:B代表乙级,A代表甲级,T代表顶级;得分是 [0,100] 区间内的整数;学校是由不超过 6 个英文字母组成的单位码(大小写无关)。注意:题目保证每个考生的准考证号是不同的。输出格式: 首先在一行中输出单位个数。随后按以下格式非降序输出单位的排行榜:排名 学校 加权总分 考生人数 其中排.原创 2021-02-20 14:25:42 · 115 阅读 · 0 评论 -
动态规划(初步多线程dp)
多线程简介多线程是为了使得多个线程并行的工作以完成多项任务,以提高系统的效率。线程是在同一时间需要完成多项任务的时候被实现的。问题描述问题描述 设有N*N的方格图(N<=10),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0。 某人从图的左上角的A 点(1,1)出发,可以向下行走,也可以向右走,直到到达右下角的B点(N,N)。在走过的路上,他可以取走方格...转载 2018-07-30 21:01:32 · 794 阅读 · 0 评论 -
数塔(动态规划dp)2种方法
在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少? 已经告诉你了,这是个DP的题目,你能AC吗?Input输入数据首先包括一个整数C,表示测试实例的个数,每个测试实例的第一行是一个整数N(1 <= N <= 100),表示数塔的高度,接下来用N行数字表示数塔...原创 2018-07-25 19:54:20 · 418 阅读 · 0 评论 -
求最大子序列的和( 动态规划dp)
只要上一个子序列最大和为正,那么无论当前值的正负,都会与当前的相加,这样以当前值结尾的子序列最大和就会增大。(一个正数 加一个 正数2 或者负数 那么都会比这个正数2 或 负数 原来要增大(此时就是站在新加的这个数的角度看子序列的和,一定会增大),同理,一个负数加任何一个数,都会使这个数减小,因此当前一子序列最大和小于零时,我们就归零它了,相当于是不加任何数,而保留当前位置值本身)上面...原创 2018-07-25 19:32:38 · 1450 阅读 · 1 评论 -
前缀、中缀、后缀表达式之间的相互转换及部分实现
背景介绍前缀表达式(又称为波兰表达式)中缀表达式后缀表达式(又称为逆波兰表达式)平时我们见到的都是:2+3*5,这样的算数表达式(中缀),我们数学中也就是用这种这种表达式(中缀)只适合人来读写,不适合计算机,所以为了方便计算机读取正确的表达式就有了前缀和后缀表达式本文将会介绍 :前缀转中缀,中缀转前缀中缀转后缀,后缀转中缀前后缀之间的相互转换可以用中缀作为中间商来解决,或者也可以构造语法树遍历来解决前缀转后缀的具体实现代码(构造树实现)https://www.cnblogs.com/原创 2020-06-26 14:26:04 · 1427 阅读 · 2 评论 -
中缀表达式转后缀表达式
题目描述 输入一个中缀表达式,编程输出其后缀表达式,要求输出的后缀表达式的运算次序与输入的中缀表达式的运算次序相一致。为简单起见,假设输入的中缀表达式由+(加)、-(减)、×(乘)、/(除)四个运算符号以及左右圆括号和英文字母组成,其中算术运算符遵守先乘除后加减的运算规则。假设输入的中缀表达式长度不超过300个字符,且都是正确的,即没有语法错误。 中缀表达式转后缀表达式的方法: 1.遇到...原创 2018-06-29 13:38:37 · 315 阅读 · 0 评论 -
火车出栈问题
题目描述铁路进行列车调度时,常把站台设计成栈式结构的站台,试问:设有编号为1到n的n辆列车,顺序开入栈式结构的站台,则可能的出栈序列有多少种?输入输入包含多组测试数据。每组为一个正整数n(1<=n<=20),表示有n辆列车。输出输出可能的出栈序列有多少种。样例输入43样例输出145提示直接利用公式:(2*n)! / (n! * n! *(n + 1)) (其中n>=1)可以...原创 2018-06-28 17:08:04 · 5011 阅读 · 0 评论 -
出栈合法性的判断(数据结构)
题目描述已知自然数1,2,...,N(1<=N<=100)依次入栈,请问序列C1,C2,...,CN是否为合法的出栈序列。输入输入包含多组测试数据。每组测试数据的第一行为整数N(1<=N<=100),当N=0时,输入结束。第二行为N个正整数,以空格隔开,为出栈序列。输出对于每组输入,输出结果为一行字符串。如给出的序列是合法的出栈序列,则输出Yes,否则输出No。样例输入5...原创 2018-06-28 16:42:49 · 2472 阅读 · 0 评论 -
小结(由递推公式得到递推矩阵)
得到这个后就简单了用矩阵快速幂即可递推转载 2018-07-23 21:21:15 · 1188 阅读 · 0 评论 -
HNUST 挑战ACM迷宫(DFS版)
题目描述 如下图所示的是一个由程序设计题目组成的ACM迷宫。迷宫的左上角是入口,右下角是出口。迷宫中每一个格子都有一个程序设计题目,挑战者要AC该题目后才能通过,大于0的数字表示AC该题目所需的最短时间。数字如果是0表示是陷阱,进去了就出不来。现在的问题是:求挑战者从入口到出口所需的最短时间。输入有多组测试实例。对于每组测试实例,先输入一个数字n(1<n<=10...原创 2018-08-13 11:44:39 · 523 阅读 · 0 评论 -
hnust 1606 手势密码(DFS)
题目描述 很多手机或平板电脑软件都可以设置手势密码,在设置了手势密码后,进入程序时,首先要输入手势密码。手势密码最少选择4个点,最多选择9个点,理论上的密码组合总共有985824种,扣除掉其中不可能完成的组合(如一些点不允许绕过),最终的可能性是389112种。可见,手势密码加强了软件访问的安全性。下面介绍一下手势密码的规则(如果你熟悉手势密码的规则,可略过):1) 从...原创 2018-08-12 19:50:48 · 340 阅读 · 0 评论 -
Faulty Robot (dfs)两种不同的写法
Faulty RobotAs part of a CS course, Alice just finished programming her robot to explore a graph having nn nodes, labeled 1,2,…,n1,2,…,n, and mm directed edges. Initially the robot starts at node 11...原创 2018-07-25 11:53:44 · 417 阅读 · 0 评论 -
hdu2755(线段树)
Problem DescriptionAt the entrance to the university, there is a hugerectangular billboard of size h*w (h is its height and w is itswidth). The board is the place where all possible announcements ...原创 2019-08-01 17:20:49 · 171 阅读 · 0 评论 -
poj3061(尺取法,前缀和+二分)
题目链接 http://poj.org/problem?id=3061题目:A sequence of N positive integers (10 < N < 100 000), each of them less than or equal 10000, and a positive integer S (S < 100 000 000) are given. Writ...原创 2019-08-08 09:44:10 · 153 阅读 · 0 评论 -
floyd算法path数组和dist数组(递归打印路径)
Floyd求最短路径其中有两个数组,一个是dist[][],一个是path[][]dist[][]dist[i][j]表示i到j的最短路径长度,这个很好理解paht[][]path[i][j]表示,i到j节点的路径中,j节点的直接前驱例如:path数组中path[0][2]=3;path[0][3]=1;path[0][1]=0;path[0][0]=-1;//-1表示没有直接前驱,也就是没有通过中间节点通过上面的数组可以得到0到2节点的最短路径为0-->1-->原创 2020-07-16 20:45:55 · 4929 阅读 · 3 评论 -
hdu1754(线段树入门题)
Problem Description很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。这让很多学生很反感。不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。Input 本题目包含多组测试,请处理到文件结束。 在每个测试的第一行,有两个正整数 N 和 M (0<N<=20...原创 2019-08-01 16:02:48 · 221 阅读 · 0 评论 -
hdu1242(BFS)
Problem Description Angel was caught by the MOLIGPY! He was put inprison by Moligpy. The prison is described as a N * M (N, M <= 200)matrix. There are WALLs, ROADs, and GUARDs in the prison.Ang...原创 2019-07-27 17:16:46 · 146 阅读 · 0 评论 -
hdu1175(dfs)
Problem Description “连连看”相信很多人都玩过。没玩过也没关系,下面我给大家介绍一下游戏规则:在一个棋盘中,放了很多的棋子。如果某两个相同的棋子,可以通过一条线连起来(这条线不能经过其它棋子),而且线的转折次数不超过两次,那么这两个棋子就可以在棋盘上消去。不好意思,由于我以前没有玩过连连看,咨询了同学的意见,连线不能从外面绕过去的,但事实上这是错的。现在已经酿成大祸,就只能将...原创 2019-07-27 12:29:18 · 138 阅读 · 0 评论 -
hdu1698(线段树入门)
Problem DescriptionIn the game of DotA, Pudge’s meat hook is actuallythe most horrible thing for most of the heroes. The hook is made up ofseveral consecutive metallic sticks which are of the same...原创 2019-07-31 23:36:21 · 174 阅读 · 0 评论 -
线段树学习
原理讲解可以参考这篇博客:https://www.cnblogs.com/huangzihaoal/p/11161024.html里面的讲解非常细致,代码中的每一个变量都加了单独的注释,可以说是非常易懂了但是他的代码不能直接当模板来用,有点臃肿,但是理解起来很方便,值得学习推荐自己手动写一个模板,加深印象线段树的应用场景:可以用来解决序列的 区间修改,区间查询(加减乘),单点修改,单...原创 2019-07-31 23:24:15 · 155 阅读 · 0 评论 -
hdu1251(字典树)
Problem DescriptionIgnatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀).Input输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串的提问,每行一个...原创 2019-07-23 10:09:20 · 119 阅读 · 0 评论 -
hdu2492(树状数组)
Problem DescriptionN(3<=N<=20000) ping pong players live along awest-east street(consider the street as a line segment).Each player has a unique skill rank. To improve their skill rank, they...原创 2019-07-26 15:31:50 · 200 阅读 · 0 评论 -
hdu1247(字典树)
Hat’s Words Time Limit: 2000/1000 MS (Java/Others) Memory Limit:65536/32768 K (Java/Others) Total Submission(s): 16086 AcceptedSubmission(s): 5737Problem Description A hat’s word is a word i...原创 2019-07-22 17:42:57 · 123 阅读 · 0 评论 -
hdu 1075(字典树)
题目:What Are You Talking AboutTime Limit: 10000/5000 MS (Java/Others) Memory Limit: 102400/204800 K (Java/Others)Total Submission(s): 19695 Accepted Submission(s): 6468problem Description Ig...原创 2019-07-22 16:01:20 · 136 阅读 · 0 评论 -
树状数组小结
首先是基础的树状数组题目题目通常是这样的:给定一个序列(矩阵),可以修改其中的某个值,求区间和;给定一个序列(矩阵),区间修改值,求单点的值基本上都是单点查询+区间更新,单点更新+区间查询,难一点就上二维或者三维这些都是直接可以套版子稍微变形一下的树状数组给定一个序列,求第i个数字前面有多少个比他大的数,而且和是多少,这种题也可以用树状数组维护难的树状数组可能与其他的知识点穿插在...原创 2019-07-26 11:09:12 · 110 阅读 · 0 评论 -
hdu2838(树状数组)
Problem Description Sherlock’s N (1 ≤ N ≤ 100,000) cows are lined upto be milked in the evening. Each cow has a unique “grumpiness” levelin the range 1…100,000. Since grumpy cows are more likely to...原创 2019-07-26 11:00:00 · 164 阅读 · 0 评论 -
poj2777(线段树)
题目链接:http://poj.org/problem?id=2777题目大意:给定n个板子,和t种颜色,o次操作,每次有两种操作:C a b x操作:把[a,b]区间内的版子全都涂成x色P a b操作 :查询[a,b]内有多少种颜色思路:首先看n的范围和t的范围t只有30,比较小,可以用二进制存储每一种颜色,比如010是一种,001又是一种,011就是两种了也可以开一个k[...原创 2019-08-06 17:05:10 · 183 阅读 · 0 评论 -
POJ1151 ,hdu1542,codevs3304(离散化,线段树,扫描线)
题目链接:http://codevs.cn/problem/3044/题目描述 Description输入n个矩形,求他们总共占地面积(也就是求一下面积的并)输入描述 Input Description 可能有多组数据,读到n=0为止(不超过15组)每组数据第一行一个数n,表示矩形个数(n<=100)接下来n行每行4个实数x1,y1,x2,y1(0 <= x1 < x...原创 2019-08-06 14:45:07 · 178 阅读 · 0 评论 -
离散化数据学习【模板】
参考博客:http://www.matrix67.com/blog/archives/108什么是离散化简单来说就是把很大的数字用一个很小的数字来代替,中间建立映射关系。数据离散化的目的是因为数据的范围过大, 把其一一映射在较小的范围,成为数据离散化。当只需要它们的相对大小关系时,可以进行离散化来节约空间复杂度。例子:给第区间[999999,10000000000000]的每一个数...原创 2019-08-14 16:20:30 · 161 阅读 · 0 评论 -
hdu2688
题目大意:给定一个序列,有两种操作Q:查询这个序列的正序数对数R:给定区间内的数字向前移动一位思路:树状数组可以nlogn求逆序数,那么同样可以求正序数,也是nlogn当每次移动的时候,就是O(n)的复杂度,但是有m次操作,也就是O(n*m)的复杂度,达到1e7,很容易超时但是n的范围比较小,所以树状数组里面可以优化一下(见代码)最后就是记得初始化,和一些细节的处理,注意数据范围...原创 2019-08-30 00:57:21 · 215 阅读 · 0 评论 -
hdu2852(权值树状数组)
Problem Description For the k-th number, we all should be veryfamiliar with it. Of course,to kiki it is also simple. Now Kiki meetsa very similar problem, kiki wants to design a container, thecont...原创 2019-08-28 20:28:29 · 358 阅读 · 0 评论 -
图论学习
关于图的几个概念定义:连通图: 在无向图中,若任意两个顶点vivi与vjvj都有路径相通,则称该无向图为连通图。强连通图: 在有向图中,若任意两个顶点vivi与vjvj都有路径相通,则称该有向图为强连通图。连通网: 在连通图中,若图的边具有一定的意义,每一条边都对应着一个数,称为权;权代表着连接连个顶点的代价,称这种连通图叫做连通网。生成树: 一个连通图的生成树是指一个连通子图,它含有图...原创 2019-08-26 23:56:29 · 254 阅读 · 0 评论 -
主席树(可持久化线段树)学习
首先学主席树也就是可持久化线段树之前先要掌握:线段树主席树和可持久化线段树的区别,主席树特指可持久化权值线段树,它属于一种可持久化线段树。https://blog.csdn.net/creatorx/article/details/75446472https://blog.csdn.net/qq_39565901/article/details/81782739...原创 2019-08-21 21:50:49 · 201 阅读 · 0 评论 -
间接排序(个人理解)
参考博客:https://www.skymoon.biz/间接排序(学习笔记)/在kruskal算法中,我看到紫书上使用了间接排序,当时有点看不懂,网上的资料也少。当时的感觉: 直接排原数组不就好了吗,为什么非得引入一个新数组,再使用间接排序。手动模拟一遍后,哦,原来是这样个人理解就是用一个新的数组,依照原数组的权值进行排序,新数组存的是下标。例如new[]为新数组,a[]为原数组...原创 2019-08-12 16:36:50 · 1013 阅读 · 1 评论 -
求逆序数模板(树状数组)
直接贴代码:关键代码都写了注释//以后可能会继续写用线段树或者归并排序处理,线段树处理代码最简洁了。O(n^2)的代码就不说了树状数组维护:#include <bits/stdc++.h>using namespace std;const int maxn=1e5;int n;int a[maxn],c[maxn];int ans;int lowbit(in...原创 2019-08-15 23:07:58 · 211 阅读 · 0 评论 -
旋转卡壳学习
首先需要懂凸包和对踵点这个其实感觉网上很多都是你转我的,我转你的,千篇一律我这里记几个对我又帮助的博客链接:特别感谢https://www.jianshu.com/p/74c25c0772d6https://jvruo.com/archives/79/https://blog.csdn.net/wang_heng199/article/details/74477738...原创 2019-08-11 22:10:08 · 130 阅读 · 0 评论 -
hdu1115(求多边形的重心)
代码和思路://①质量集中在顶点上// n个顶点坐标为(xi,yi),质量为mi,则重心// X = ∑( xi×mi ) / ∑mi// Y = ∑( yi×mi ) / ∑mi// 特殊地,若每个点的质量相同,则// X = ∑xi / n// Y = ∑yi / n//②质量分布均匀// 特殊地,质量均匀的三角形重心:// X = ( x0 + x...转载 2019-08-10 22:58:06 · 251 阅读 · 0 评论 -
判断两条线段是否相交(向量叉乘)
文章原处:https://www.cnblogs.com/tuyang1129/p/9390376.html网上很多讲这个问题都不完整,仅仅是叉积一下,并未考虑平行共线等情况,这篇文章讲的很细致,所以我转载过来了问题:给出两条线段,问两线段是否相交?向量叉乘(行列式计算):向量a(x1,y1),向量b(x2,y2):首先我们要明白一个定理:向量a×向量b(×为向量叉乘...转载 2019-08-10 22:37:47 · 8836 阅读 · 1 评论 -
凸包算法学习
参考博客:https://www.cnblogs.com/czaoth/p/6912073.htmlhttps://www.cnblogs.com/aiguona/p/7232243.htmlhttps://baike.baidu.com/item/凸包凸包的概念简单来说: 给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边形,它能包含点集中所有的点。图片来自百度凸包...原创 2019-08-10 17:41:11 · 341 阅读 · 0 评论 -
尺取法学习
算法竞赛常用的解题技巧:尺取法参考资料:《挑战程序设计竞赛》p146参考博客:https://blog.csdn.net/consciousman/article/details/52348439介绍:尺取法:顾名思义,像尺子一样取一段,借用挑战书上面的话说,尺取法通常是对数组保存一对下标,即所选取的区间的左右端点,然后根据实际情况不断地推进区间左右端点以得出答案。之所以需要掌握这个技...原创 2019-08-14 16:47:19 · 283 阅读 · 0 评论
分享