![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法刷题
文章平均质量分 66
记录一下有意思的题目
linengcs
Keep Coding, Keep Happy
展开
-
4274. 后缀表达式-二叉表达式树
原题链接原创 2022-07-01 00:10:27 · 438 阅读 · 0 评论 -
L2-004 这是二叉搜索树吗? (25 分)
原题链接https://pintia.cn/problem-sets/994805046380707840/problems/994805070971912192分析本题主要考察了二叉搜索树(二叉排序树)的性质:二叉排序树的左子树全部小于根节点,右子树全部大于等于根节点,同理,二叉排序树的每个非叶子结点都满足 T:在判断所给序列是否是前序序列时就用这个性质判断,因为前序是先根再左再右,所以每个二叉排序树的前序遍历数组(1~n)都会满足:从第二个位置开始都比第一个位置(根节点)小,直到遇到第一个原创 2022-04-05 15:21:07 · 985 阅读 · 0 评论 -
P1004 [NOIP2000 提高组] 方格取数 - 四维dp
方格取数原题链接https://www.luogu.com.cn/problem/P1004通过题意我们可以可以看出这是一道动态规划的题,第一想法是用二维的话只能dp出最大值的路径,再用一次二维dp求出次大值的路径,这样的想法是错误的!题目要求的是两条路径走到右下角的和的最大值!如果是按照刚刚的想法,先求最大值的路径,再求次大值的路径,最大值确实是最大值,但是次大值就不一定了,为了走出最大值就不得不让次大值小。可以自己举个例子看看。 也就是说这两步不能分成两次规划,要让和的...原创 2022-04-03 19:06:09 · 807 阅读 · 0 评论 -
1212. 地宫取宝 - 四维dp
1212.地宫取宝 原题链接https://www.acwing.com/problem/content/1214/对于一些基础的二维的动态分析( f[i][j] ),在题目添加了很多限制条件后会变得很复杂,而这时我们可以考虑增加状态方程的纬度,来简化问题。本题中并不像其他题让你输出走到右下角后的和最大值,而是要求走到右下角后手中要有k件物品,即限制了在走的过程中对考虑对物品捡与不捡 捡物品也不是想捡就捡,只要当手中的所有物品的最大价值C都比当前位置的物品的价值小才可以捡本题要求的是输出走到右下原创 2022-04-03 18:40:18 · 136 阅读 · 0 评论 -
四平方和(空间换时间+优化思维)
原题链接对于这道题,一开始肯定会想到最最最暴力的方法,就是四重循环,毫无疑问这个会tle,但不代表这种思路就是错的,做任何题一下就想到最优方案很难,都是想到一个似乎可行的方案(通常就是暴力),然后开始逐步思考去做优化,而优化无非就是时间换空间,空间换时间对于题目中的a,b,c,da,b,c,da,b,c,d,可以知道最大为10310^3103级别,也就是说对这四重循环,我们优化到两重循环就能过而时间效率的提高,意味着空间的损耗,我们发现,对于ddd每循环一次,对内部的两层循环c,dc,dc,d,每次都原创 2022-03-30 21:01:40 · 237 阅读 · 0 评论 -
表达式转换 (25 分)
算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。日常使用的算术表达式是采用中缀表示法,即二元运算符位于两个运算数中间。请设计程序将中缀表达式转换为后缀表达式。输入格式:输入在一行中给出不含空格的中缀表达式,可包含+、-、*、\以及左右括号(),表达式不超过20个字符。输出格式:在一行中输出转换后的后缀表达式,要求不同对象(运算数、运算符号)之间以空格分隔,但结尾不得有多余空格。输入样例:2+3*(7-4)+8/4输出样例:2 3 7 4 - * + 8 4 / +原创 2022-03-30 16:33:52 · 82 阅读 · 0 评论 -
AcWing1248 灵能传输
原题链接https://www.acwing.com/problem/content/1250/Code#include <iostream>#include <algorithm>#include <cmath>#include <cstring>using namespace std;const int N = 3e5+10;typedef long long ll;int t,n;ll a[N];ll s[N];bo.原创 2022-03-14 22:21:15 · 134 阅读 · 0 评论 -
D.背单词的小智(二分)
题目描述小智在刚刚结束的 CET-4 考试中顺利通过了!现在,他要开始备战 CET-6 了。可是,他的单词功底太差了,于是他准备开始摆烂背单词。可是,人脑的能力是有限的,小智的大脑每一天都会有一个记忆的上限,如果超过这个上限,再多的单词也记不下了。有一天,小智在背单词的时候想到了一个问题,你能帮帮他吗?小智一共有n个单词需要背,第ii个单词所拥有的「精神值」为。小智每天的记忆力都是有上限mm的。如果小智在第ii天内背完了[l,r]内的单词,那么这些单词将会占用小智...原创 2022-03-13 10:55:21 · 614 阅读 · 0 评论 -
1295. X的因子链----算术基本定理/多重集合排列数/欧拉筛
原题链接https://www.acwing.com/problem/content/1297/算术基本定理任何数都能质数积表示:e.g.一个数的最长表示方法就是:质因子从小到大多重集合的排列数问题以上面例子的为例,问2个2和3个3和1个5有多少种排列数,首先我们可以知道总的组合数为6!个,将所有的组合分组,不同的组代表不同的组合,例如2 2 3 3 3 5 和 2 3 3 3 2 5就是不同的组,我们要求的排列数实际就是有多少个组。因为2和3有重复,所以每个组都有个重复的方案,原创 2022-03-06 12:15:29 · 124 阅读 · 0 评论 -
1207. 大臣的旅费—树的直径
题目链接求树的直径(树中最长的距离)任意取一个点x,求其到其他所有点的距离,最远距离的为y 再求y到其他所有点的距离,此时最远距离就是答案可以用反证法假设y点不是直径的端点证明上述结论,因为点到点之间的路径是一定的,所以可以用dfs或者bfs求距离,如果是图的话就用Dijkstra或者Floyd算法求补充:边数=n-1就是树(无环图),边数<n-1连通块 边数>n-1有环图AC Code#include <iostream>#include <vect原创 2022-03-04 23:55:06 · 64 阅读 · 0 评论 -
数列区间最大值-RMQ/线段树/树状数组
题目输入一串数字,给你 M 个询问,每次询问就给你两个数字 X,Y,要求你说出 X 到 Y 这段区间内的最大数。输入格式第一行两个整数 N,M 表示数字的个数和要询问的次数;接下来一行为 N 个数;接下来 M 行,每行都有两个整数 X,Y。输出格式输出共 M 行,每行输出一个数。数据范围1≤N≤1051≤N≤10^51≤N≤105,1≤M≤1061≤M≤10^61≤M≤106,1≤X≤Y≤N1≤X≤Y≤N1≤X≤Y≤N,数列中的数字均不超过231−12^{31}−1231−1Sol原创 2022-03-01 19:42:06 · 414 阅读 · 0 评论 -
AcWing 1214. 波动数列 -动态规划
对于本题我们可以列出下列等式:x+(x+d1)+(x+d1+d2)+...+(x+d1+d2+...+dn−1)=sx+(x+d_1)+(x+d_1+d_2)+...+(x+d_1+d_2+...+d_{n-1})=sx+(x+d1)+(x+d1+d2)+...+(x+d1+d2+...+dn−1)=s其中,d={+a,−b}d=\{ +a,-b\}d={+a,−b},变形得:nx+(n−1)d1+(n−2)d2+...+dn−1=snx+(n-1)d_1+(n-2)d_2+...+d_原创 2022-02-28 15:51:34 · 209 阅读 · 0 评论 -
K倍区间-前缀和进阶
给定一个长度为 N 的数列,A1,A2,…ANA_1,A_2,…A_NA1,A2,…AN,如果其中一段连续的子序列 Ai,Ai+1,…AjA_i,A_{i+1},…A_jAi,Ai+1,…Aj 之和是 K 的倍数,我们就称这个区间 [i,j] 是 K 倍区间。你能求出数列中总共有多少个 K 倍区间吗?输入格式第一行包含两个整数 N 和 K。以下 N 行每行包含一个整数 Ai。输出格式输出一个整数,代表 K 倍区间的数目。数据范围1≤N,K≤100000,1≤AiA_iAi≤1原创 2022-02-25 11:46:00 · 146 阅读 · 0 评论 -
打表法-空间换时间
以例题为讲解背景:题目 四平方和四平方和定理,又称为拉格朗日定理:每个正整数都可以表示为至多 4 个正整数的平方和。如果把 0 包括进去,就正好可以表示为 4 个数的平方和。比如:5=02+02+12+225=0^2+0^2+1^2+2^25=02+02+12+227=12+12+12+227=1^2 + 1^2+1^2+2^27=12+12+12+22对于一个给定的正整数,可能存在多种平方和的表示法。要求你对 4 个数排序:0≤a≤b≤c≤d并对所有的可能表示法按 a,b,c,d 为原创 2022-02-23 20:23:24 · 75 阅读 · 0 评论 -
带分数(嵌套dfs)
原题链接#1 纯暴力搜索算法流程:利用next_permutation得到数组1-9的每种排列情况,用暴力双重循环来遍历出介于数组之间的任意两个位置(夹板),从而将数组分成三部分,分别为a,b,c,再判断a.b.c是否符合要求,记录个数要点:对于计算一个数组中任意位置之间的数字,采用下列代码可以很好解决,l为起点,r为终点int calu(int l, int r){ int res=0; for(int i=l; i<=r; i++) res =原创 2022-01-17 16:44:22 · 406 阅读 · 0 评论 -
Uva 156, Ana nagrams
题目输入一些单词,找出所有满足如下条件的单词:该单词不能通过字母重排,得到输入文本中的另外一个单词。在判断是否满足条件时,字母不分大小写,但在输出时应保留输入中的大小写,按字典序排序(所有大写字母在小写字母前面)样例输入ladder came tape soon leader acme RIDE lone Dreis peat ScAlE orb eye Rides dealer NotE derail LaCeS drIed noel dire Disk mace Rob dries #原创 2021-11-21 16:06:49 · 448 阅读 · 0 评论 -
Uva725 Division
原英文版题目PDFhttps://onlinejudge.org/external/7/p725.pdf输入正整数n,从小到大输出所有形如abcde/fghij=n的表达式,其中a-j恰好为数字0-9的一个排列(可以有前导0),2=<n<=79.输入61620输出There are no solutions for 61.79546 / 01283 = 6294736 / 01528 = 62分析纯暴力(10个for循环)是肯定不行的,我们可以通过等..原创 2021-11-30 15:37:37 · 468 阅读 · 0 评论 -
洛谷P1229遍历问题——求中序数量
通常我们都是已知前序+中序 -> 后序 后序+中序 -> 前序在求BiTree的具体的前后序时,已知中序遍历是必要的,因为根据中序我们可以知道具体的左子树和右子树若只知前后序,我们无法得知某个结点是左还是右,所以这里会出现不同树的情况具体题目:题目描述我们都很熟悉二叉树的前序、中序、后序遍历,在数据结构中常提出这样的问题:已知一棵二叉树的前序和中序遍历,求它的后序遍历,相应的,已知一棵二叉树的后序遍历和中序遍历序列你也能求出它的前序遍历。然而给定一棵二叉树的前序和后序遍.原创 2021-10-16 19:03:12 · 246 阅读 · 0 评论 -
质数天(字符串年份的分解+质数判断)
我们将所有日期为质数的天数定义为质数天。 例如:2019年8月23日我们可以写成20190823,我们很容易发现这是一个质数。但我们的质数天同时还需要满足201908230190823190823908230823823233以上数均为质数,我们才称作质数天。我们想知道从21世纪30世纪(2000年1月1日至2999年12月31日)有多少个质数天。AC CODE#include <bits/stdc++.h>using namespace ..原创 2021-12-13 10:24:03 · 1497 阅读 · 0 评论 -
P1119 灾后重建 Floyd算法本质
题目背景B 地区在地震过后,所有村庄都造成了一定的损毁,而这场地震却没对公路造成什么影响。但是在村庄重建好之前,所有与未重建完成的村庄的公路均无法通车。换句话说,只有连接着两个重建完成的村庄的公路才能通车,只能到达重建完成的村庄。题目描述给出 B 地区的村庄数NN,村庄编号从00到N-1N−1,和所有MM条公路的长度,公路是双向的。并给出第ii个村庄重建完成的时间t_iti,你可以认为是同时开始重建并在第t_iti天重建完成,并且在当天即可通车。若t_iti为0...原创 2021-11-04 09:26:52 · 167 阅读 · 0 评论 -
P1629 邮递员送信(Dikstra反向建边)
题目描述有一个邮递员要送东西,邮局在节点1。他总共要送n-1样东西,其目的地分别是节点2到节点n。由于这个城市的交通比较繁忙,因此所有的道路都是单行的,共有m条道路。这个邮递员每次只能带一样东西,并且运送每件物品过后必须返回邮局。求送完这n-1样东西并且最终回到邮局最少需要的时间。输入格式第一行包括两个整数,n和m,表示城市的节点数量和道路数量。第二行到第(m+1)行,每行三个整数,u,v,w表示从u到v有一条通过时间为w的道路。输出格式输出仅...原创 2021-11-05 11:56:29 · 319 阅读 · 0 评论 -
7-2 修理牧场 (25 分) 哈夫曼树
题目农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数Li个长度单位,于是他购买了一条很长的、能锯成N块的木头,即该木头的长度是Li的总和。但是农夫自己没有锯子,请人锯木的酬金跟这段木头的长度成正比。为简单起见,不妨就设酬金等于所锯木头的长度。例如,要将长度为20的木头锯成长度为8、7和5的三段,第一次锯木头花费20,将木头锯成12和8;第二次锯木头花费12,将长度为12的木头锯成7和5,总花费为32。如果第一次将木头锯成15和5,则第二次锯木头花费15,总花费为35(原创 2021-11-16 16:12:26 · 1444 阅读 · 0 评论 -
Uva400 Unix ls
SubjectThe computer company you work for is introducing a brand new computer line and is developing a new Unix-like operating system to be introduced along with the new computer. Your assignment is to write the formatter for the ls function.Your progra原创 2021-11-27 12:27:24 · 87 阅读 · 0 评论 -
Uva572 Oil Deposits(DFS连通块
英文题目分析:看到这个题的第一反应是建图,然后依次深搜每一个点(在一次深搜中给搜到的点打上标记),深搜一次就是一个块,最后求块和但是在在建图上面自己纠结于要建一个独立的邻接矩阵,过程很繁琐,后来看了参考代码后就改成遇到一个油田就深搜(还未被归属于某个块的)这个题纠正了自己的对图深搜的理解,在Brute Force专题里的深搜就是去遍历解答树,找到符合要求的节点(答案),而这个深搜模板与图的深搜(stack)不同,我就特意划分开来,避免搞混,导致在这个题上第一反应也是深搜,但是却走了歪路..原创 2021-12-07 16:57:04 · 414 阅读 · 0 评论 -
Uva816 Abbott‘s Revenge (图的bfs)
英文原题https://onlinejudge.org/external/8/p816.pdf收获:数组可以存多维,看自己怎么用,不要被二维限制 涉及多种情况的能用规律数字(递增)表示最好,减少代码冗余,更加易懂例如:本题用不同的朝向,不同的转向都用字符串的下标表示,direction="NESW",turns="FLR",在访问的时候就可以0-N,1-E,2-S,3-W表示,更加方便,而不是用大量的if或者case语句 memset比fill更适合初始化多维数组 图bfs用queue存,图的原创 2021-12-08 11:30:39 · 232 阅读 · 0 评论 -
逆序对(归并排序+树状数组)
题目描述猫猫 TOM 和小老鼠 JERRY 最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏,现在他们喜欢玩统计。最近,TOM 老猫查阅到一个人类称之为“逆序对”的东西,这东西是这样定义的:对于给定的一段正整数序列,逆序对就是序列中a_i>a_j且i<j的有序对。知道这概念后,他们就比赛谁先算出给定的一段正整数序列中逆序对的数目。注意序列中可能有重复数字。输入格式第一行,一个数n,表示序列中有n个数。第二行n个数,表示给定的序列。序列中每个...原创 2021-12-15 20:35:25 · 1495 阅读 · 0 评论 -
P1908 逆序对(归并排序)
题目描述猫猫 TOM 和小老鼠 JERRY 最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏,现在他们喜欢玩统计。最近,TOM 老猫查阅到一个人类称之为“逆序对”的东西,这东西是这样定义的:对于给定的一段正整数序列,逆序对就是序列中ai>aj且i<j的有序对。知道这概念后,他们就比赛谁先算出给定的一段正整数序列中逆序对的数目。注意序列中可能有重复数字。Update:数据已加强。输入格式第一行,一个数n,表示序列中有n个数。第二行n...原创 2021-11-07 17:03:13 · 295 阅读 · 0 评论 -
Uva514 Rails
原题英文版PDF对题意有不理解的建议直接看英文原版,描述更细致中文题意某城市有一个火车站,铁轨铺设如图。有n节车厢从A方向驶入车站,按进站的顺序编号为1~n。你的任务是判断是否能让他们按照某种特定的顺序进入B方向的铁轨并驶出车站。例如,出栈顺序(5 4 1 2 3)是不可能的,但(5 4 3 2 1)是可能的。 为了重组车厢,你可以借助中转站C。这是一个可以停放任意多节车厢的车站,但由于末端封顶,驶入C的车厢必须按照相反的顺序驶出C。对于每节车厢,一旦从A移入C,就不能返回A了;一旦从C移.原创 2021-11-29 22:17:41 · 151 阅读 · 0 评论 -
P3406 海底高铁(前缀和+差分+坑点)
P3406 海底高铁https://www.luogu.com.cn/problem/P3406分析本题是一个典型的前缀和和差分的例题,题目难度不大,把题目样例画一下就能有大致思路1. 题目的一个考察点在每条路段都有2种方案,办卡或者不办卡,那么就要考虑最便宜的情况什么时候最便宜?办卡的总消费C1 = 卡费 + 优惠价 * 经过次数不办卡的总费用C2 = 原价 * 经过次数如果C1 < C2,那么就选择办卡,这里的的未知数只有一个——>经过次数2. 现在问题就来...原创 2021-12-11 15:32:56 · 678 阅读 · 0 评论 -
洛谷P1102 A-B 数对(A+B Problem)
题目描述出题是一件痛苦的事情!相同的题目看多了也会有审美疲劳,于是我舍弃了大家所熟悉的 A+B Problem,改用 A-B 了哈哈!好吧,题目是这样的:给出一串数以及一个数字CC,要求计算出所有A - B = CA−B=C的数对的个数(不同位置的数字一样的数对算不同的数对)。输入格式输入共两行。第一行,两个整数N, CN,C。第二行,NN个整数,作为要求处理的那串数。输出格式一行,表示该串数中包含的满足A - B = CA−B=C的数对的个数。输入输出...原创 2021-10-30 20:55:32 · 685 阅读 · 0 评论 -
7-5 完全二叉树的层序遍历 (25 分)
一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是完美二叉树。对于深度为D的,有N个结点的二叉树,若其结点对应于相同深度完美二叉树的层序遍历的前N个结点,这样的树就是完全二叉树。给定一棵完全二叉树的后序遍历,请你给出这棵树的层序遍历结果。输入格式:输入在第一行中给出正整数N(≤30),即树中结点个数。第二行给出后序遍历序列,为N个不超过 100 的正整数。同一行中所有数字都以空格分隔。输出格式:在一行中输出该树的层序遍历序列。所有数字都以 1 个空格分隔,行...原创 2021-11-16 22:48:42 · 844 阅读 · 0 评论 -
P2671 [NOIP2015 普及组] 求和
题目链接:P2671 [NOIP2015 普及组] 求和https://www.luogu.com.cn/problem/P2671题目分析(结合题解整理出我能看懂的)20分做法看完这题,第一想法当然是无脑暴力啦...直接枚举x,y,z,看是否满足条件即可。算法复杂度为O(N^3)O(N3)。[代码就算了]这样就可得20分了。当然,如果你想用更高级的算法不开long long也是可以的。40分做法可以直接枚举x,z的值,通过条件(1)求出y。再看是否满足条件。算法复杂度为O(N.转载 2021-11-13 12:52:55 · 292 阅读 · 1 评论