- 博客(143)
- 收藏
- 关注
原创 Acwing---841. 字符串哈希
例如,如果她将数字 14 转换为二进制数,那么正确的结果应为 1110,但她可能会写下 0110 或 1111。首先特殊判断第一位,如果为0,那么第一位可以改变为1:11001 十进制为 9+2^4=25 【如果为1,则。给定贝茜将数字 N 转换为二进制数字以及三进制数字的结果,请确定 N 的正确初始值(十进制表示)。不能在改变了,正常的数没有前导零】然后看第二位 如果为0,则改变1,如果为1 则改变为0,记录下。贝茜不会额外添加或删除数字,但是可能会由于写错数字的原因,写下包含前导 0 的数字。
2024-03-05 21:54:59
941
原创 Acwing---841. 字符串哈希
给定一个长度为 n 的字符串,再给定 m个询问,每个询问包含四个整数 l1,r1,l2,r2,请你判断 [l1,r1] 和 [l2,r2] 这两个区间所包含的字符串子串是否完全相同。接下来 m 行,每行包含四个整数 l1,r1,l2,r2,表示一次询问所涉及的两个区间。第二行包含一个长度为 n 的字符串,字符串中只包含大小写英文字母和数字。对于每个询问输出一个结果,如果两个字符串子串完全相同则输出。第一行包含整数 n 和 m,表示字符串长度和询问次数。字符串中只包含大小写英文字母和数字。
2024-03-05 11:46:32
574
原创 Acwing---1497. 树的遍历
后序遍历的最后一个节点是跟节点,得到根节点后,递归构造根节点的左儿子和右儿子。官方并未给出各节点权值的取值范围,为方便起见,在本网站范围为 1∼N。现在给出它的后序遍历和中序遍历,请你输出它的层序遍历。第三行包含 N 个整数,表示二叉树的中序遍历。第二行包含 N个整数,表示二叉树的后序遍历。当队列非空,队头的左右儿子入队列,队头出队。一个二叉树,树中每个节点的权值互不相同。第一行包含整数 N,表示二叉树的节点数。个整数,表示二叉树的层序遍历。也可以选择其他方式构造二叉树。按层次遍历构造出来的二叉树。
2024-03-04 17:03:46
626
原创 Acwing---3777. 砖块
如果 k>0,则还需再输出一行 k 个整数,p1,p2,…其中 pi 示第 i 次操作,选中的砖块为 pi 和 pi+1 号砖块。你的目标是通过不超过 3n 次操作,将所有砖块的颜色变得一致。选择两个相邻的砖块,反转它们的颜色。,则表示第 i 号砖块是白色的,如果第 i 个字符是。n 个砖块排成一排,从左到右编号依次为 1∼n。否则,首先输出一行 k,表示需要的操作次数。每个砖块要么是黑色的,要么是白色的。每组数据,如果无解则输出一行 −1。,则表示第 i 个砖块是黑色的。,如果第 i 个字符是。
2024-03-03 22:28:10
989
原创 Acwing---1208. 翻硬币
现在小明的问题是:如果已知了初始状态和要达到的目标状态,每只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少呢?如果通过每次翻转两枚相邻硬币,能从状态一变为状态二,则两个状态之间必定有偶数个不同状态的硬币。我们用 * 表示正面,用 o 表示反(是小写字母,不是零)。从最左侧开始遍历,如果该位置硬币状态与目标不同,就翻动该位置和该位置后面的两枚硬币。因为题目说了有解,所以遍历到倒数第二枚的时候,所有硬币状态就与目标相同了。两行等长的字符串,分别表示初始状态和要达到的目标状态。数据保证答案一定有解。
2024-03-02 22:07:07
471
原创 Acwing---3768. 字符串删减
第二行包含一个长度为 n的由小写字母构成的字符串。现在,需要删掉其中的一些字母,使得字符串中不存在。给定一个由 n个小写字母构成的字符串。请问,最少需要删掉多少个字母?输出最少需要删掉的字母个数。如果字符串本来就不存在。,则无需删掉任何字母。第一行包含整数 n。
2024-03-02 21:30:51
456
原创 Acwing---1460. 我在哪?
然而,每个农场都沿路设有一个彩色的邮箱,所以约翰希望能够通过查看最近的几个邮箱的颜色来唯一确定他所在的位置。输入的第一行包含 N,第二行包含一个由 N 个字符组成的字符串,每个字符均在 A…不幸的是农场并没有编号,这使得约翰难以分辨他在这条路上所处的位置。个邮箱,那么可得到的连续颜色序列可以唯一确定他在道路上的位置。输出一行,包含一个整数,为可以解决农夫约翰的问题的最小 K 值。个邮箱序列,他都可以唯一确定这一序列在道路上的位置。,则沿路有两个这一连续颜色序列可能所在的位置。二分 O(n2logn)
2024-03-02 16:13:26
1010
原创 Acwing---3956. 截断数组
给定一个长度为 n 的数组 a1,a2,…现在,要将该数组从中间截断,得到三个非空子数组。第二行包含 n 个整数 a1,a2,…要求,三个子数组内各元素之和都相等。请问,共有多少种不同的截断方法?输出一个整数,表示截断方法数量。第一行包含整数 n。
2024-02-29 14:43:04
409
原创 Acwing---883. 高斯消元解线性方程组
但是考虑到本题作为一道模板题,考察点并不在于此,在此处卡住大多同学的代码没有太大意义,故增加。在数学中,一般没有正零或负零的概念,所以严格来说应当输出。所有输入系数以及常数均保留两位小数,绝对值均不超过 100。输入一个包含 n 个方程 n 个未知数的线性方程组。如果给定线性方程组存在唯一解,则输出共。如果给定线性方程组存在无数解,则输出。注意:本题有 SPJ,当输出结果为。个未知数的解,结果保留两位小数。如果给定线性方程组无解,则输出。个系数以及等号右侧的常数。个实数,表示一个方程的。
2024-02-28 16:40:37
658
原创 Acwing---877. 扩展欧几里得算法
我们观察到:欧几里德算法停止的状态是: a’= gcd , b’ = 0 ,(a’,b’是递归最后一层时参数的值)那么,这是否能给我们求解 x y 提供一种思路呢?(无所谓是多少,反正任何数乘以 0 都等于 0 但是a 的系数一定要是 1),这时,我们就会有: a’*1 + b’*0 = gcd。扩展欧几里得算法就是在求a,b的最大公约数d=gcd(a,b)的同时,求出贝祖等式ax+by=m的一个解(x0,y0)因为,这时候,只要 a = gcd 的系数是 1 ,那么只要 b 的系数是 0 或者其他值。
2024-02-17 16:08:11
983
原创 Acwing---869. 试除法求约数
给定 n 个正整数 ai,对于每个整数 ai,请你按照从小到大的顺序输出它的所有约数。行,每行包含一个整数。
2024-02-16 16:24:40
962
原创 Acwing---846. 树的重心
重心定义:重心是指树中的一个结点,如果将这个点删除后,剩余各个连通块中点数的最大值最小,那么这个节点被称为树的重心。请你找到树的重心,并输出将重心删除后,剩余各个连通块中点数的最大值。输出一个整数 m,表示将重心删除后,剩余各个连通块中点数的最大值。也就是说,dfs并不直接返回答案,而是在每次更新中迭代一次答案。行,每行包含两个整数。给定一颗树,树中包含。
2024-02-16 15:02:17
1134
原创 Acwing---844.走迷宫
从起点开始,往前走第一步,记录下所有第一步能走到的点,然后从所第一步能走到的点开始,往前走第二步,记录下所有第二步能走到的点,重复下去,直到走到终点。一个人位于左上角 (1,1)处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。请问,该人从左上角移动至右下角 (n,m) 处,给定一个 n×m 的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0 表示可以走的路,1 表示不可通过的墙壁。数据保证 (1,1) 处和 (n,m) 处的数字为 0,且一定至少存在一条通路。
2024-02-13 16:22:18
1194
原创 Acwing---842.排列数字
给定一个整数 n,将数字 1∼n排成一排,将会有很多种排列方法。现在,请你按照字典序将所有的排列方法输出。按字典序输出所有排列方案,每个方案占一行。共一行,包含一个整数 n。DFS 递归搜索树。
2024-02-13 14:23:48
480
原创 Acwing---840. 模拟散列表
次操作,对于每个询问操作输出对应的结果。寻找所需10^5空间 2倍大的 第一个质数。行,每行包含一个操作指令,操作指令为。,询问整数 x 是否在集合中出现过;,输出一个询问结果,如果。在集合中出现过,则输出。,插入一个整数 x;
2024-02-12 20:09:07
977
原创 Acwing---839. 模拟堆
现在要进行 N次操作,对于所有第 2 个操作,输出当前集合的最小值。行,每行包含一个操作指令,操作指令为。,输出一个结果,表示当前集合中的最小值。
2024-02-11 20:17:08
1682
原创 Acwing---838. 堆排序
输入一个长度为 n 的整数数列,从小到大输出前 m 小的数。输入一个长度为 n的整数数列,从小到大输出前 m 小的数。共一行,包含 m 个整数,表示整数数列中前 m 小的数。
2024-02-11 13:46:11
868
原创 Acwing---837. 连通块中点的数量
初始化,让自己指向自己,同时标记自己为祖先节点下,有多少个连通块,初始为1。因为与合并题目中唯一不同的是,多了记录合并集合中连通块的个数。通过size数组记录以当前点x为祖先节点的集合中的连通块个数。size[3] = 4 以3为根节点下有4个连通块。size[4] = 4 以4为根节点下有4个连通块。行,每行包含一个操作指令,指令为。)的无向图,初始时图中没有边。在同一个连通块中,则输出。,输出一个整数表示点。所在连通块中点的数量。更新4节点的连通块情况。这时候有8个点相连接。
2024-02-10 16:58:19
1051
原创 Acwing---143. 最大异或对
可以先理解它的第二维度,只有两种状态0/1,是因为这一位表示的是某个数字的的某一位是0 / 1,而第一维的大小是我们用的十位二进制表示下一共有多少位数,在本题中,数字一共有N个数字,N是小于。其实就是我想知道x的二进制表示中的第i位(二进制位从第0位开始表示第0位 - 第 31 位),本题的题目范围到。3.查询的时候为了异或大小最大,那么就应该从根节点开始遍历最高位开始尽量让异或结果为。其实存的值就是他的两个子节点的一维坐标的值。数组中,如果没有那么就将他的值附上。,在遍历查询数字的第i位的时候取第。
2024-02-08 14:59:32
955
原创 Acwing---835. Trie字符串统计
Trie树本质上是一颗多叉树,对于字母而言最多有26个子结点。所以这个数组包含了两条信息。如果son[1][0] = 0,则意味着没有值为。,表示当前结点的儿子,如果没有的话,可以等于。个操作,所有输入的字符串总长度不超过。行,每行包含一个操作指令,指令为。,都要输出一个整数作为结果,表示。,字符串仅包含小写英文字母。Trie树中有个二维数组。相当于链表中的ne[N]。在集合中出现的次数。表示1结点的一个值为。
2024-02-07 21:51:12
638
原创 Acwing---154. 滑动窗口
i ] ,如果队头元素小于 i − k+1 ,说明最小值不在新窗口中,此时应当弹出队头元素。不妨设下标从 0 开始,初始时 i 指向 0 ,并且 i 从 0 遍历至 n-1 ,每次遍历都将 a [ i ] 插入到队列中。可以发现,只要有 i+1 < k就说明滑动窗口还未形成,此时无需输出最小值,当 i+1 ≥ k 时才需要输出最小值。使用单调递减队列来保存滑动窗口中的元素,下标越大的元素越接近队尾,下标越小的元素越接近队头,于是求滑动窗口中的最小值相当于访问队头元素。个整数,代表数组的具体数值。
2024-02-05 12:27:20
1108
原创 Acwing---830. 单调栈
用单调递增栈,当该元素可以入栈的时候,栈顶元素就是它左侧第一个比它小的元素。的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出。个数的左边第一个比它小的数,如果不存在则输出。个整数,表示整数数列。
2024-02-04 19:49:59
1054
原创 Acwing---829. 模拟队列
代表元素所在区间,当区间非空的时候,对列非空。操作的查询结果为一个整数,表示队头元素的值。操作都要输出一个查询结果,每个结果占一行。行,每行包含一个操作命令,操作命令为。左闭右闭,代表队列中元素所在的区间。就是下一次入队,元素应该放的位置。个操作,其中的每个操作。询问队头query:用。都要输出相应的结果。
2024-02-04 19:18:07
1037
原创 Acwing---3302. 表达式求值
我们人在做这样计算题的时候,往往也是先去寻找乘除先计算,写出计算结果,最后再看加减运算,那么自然乘除比加减高上一级,在此之上是括号。基本思路:针对这一问题,我们运算的时候是考虑运算符优先级问题的,那么就得把优先级高的数据先处理,很自然地就选择了栈来倒序。(加 减 乘 整除),可能包含括号,请你求出表达式的最终值。在这个思路上,去看代码就更为容易看懂了。给定一个表达式,其中运算符仅包含。共一行,为表达式的结果。共一行,为给定表达式。
2024-02-04 18:00:29
436
原创 Acwing---828.模拟栈
empty :top 大于等于 0 栈非空,小于 0 栈空。top == -1?“YES” : “NO”push x :栈顶所在索引往后移动一格,然后放入x。用top表示栈顶所在的索引。初始时,top = -1。操作的查询结果为一个整数,表示栈顶元素的值。操作都要输出一个查询结果,每个结果占一行。pop : top 往前移动一格。query : 返回栈顶元素。行,每行包含一个操作命令,操作命令为。
2024-02-04 14:52:13
961
原创 Acwing---827.双链表
个插入的数并不是指当前链表的第。例如操作过程中一共插入了。个数,则按照插入的时间顺序,这。共一行,将整个链表从左到右输出。
2024-02-04 14:33:49
1389
原创 Acwing---826.单链表
次操作,进行完所有操作后,从头到尾输出整个链表。个插入的数后插入一个数。个插入的数并不是指当前链表的第。例如操作过程中一共插入了。个数,则按照插入的时间顺序,这。共一行,将整个链表从头到尾输出。向链表头插入一个数;个插入的数后面的数;
2024-02-03 17:11:44
1085
原创 Acwing---802.区间和
接下来,进行 m次询问,每个询问包含两个整数 l 和 r,你需要求出在区间 [l,r] 之间的所有数的和。现在,我们首先进行 n 次操作,每次操作将某一位置 x 上的数加 c。假定有一个无限长的数轴,数轴上每个坐标上的数都是 0。共 m 行,每行输出一个询问中所求的区间内数字和。再接下来 m 行,每行包含两个整数 l 和 r。接下来 n 行,每行包含两个整数 x 和 c。第一行包含两个整数 n和 m。
2024-02-02 21:37:16
894
原创 Acwing---800.数组元素的目标和
共一行,包含一个整数,表示合并区间完成后的区间个数。注意如果在端点处相交,也算有交集。,要求合并所有有交集的区间。输出合并完成后的区间个数。行,每行包含两个整数。
2024-02-02 14:34:39
448
原创 Acwing---803.区间合并
可以先按左端点排序,再维护一个区间,与后面一个个区间进行 比较。共一行,包含一个整数,表示合并区间完成后的区间个数。注意如果在端点处相交,也算有交集。,要求合并所有有交集的区间。输出合并完成后的区间个数。行,每行包含两个整数。
2024-02-02 13:45:29
557
原创 Acwing---798.差分矩阵
我们可以先假想a数组为空,那么b数组一开始也为空,但是实际上a数组并不为空,因此我们每次让b数组以(i,j)为左上角到以(i,j)为右下角面积内元素(其实就是一个小方格的面积)去插入 c=a[i][j],等价于原数组a中(i,j) 到(i,j)范围内 加上了 a[i][j] ,因此执行n*m次插入操作,就成功构建了差分b数组.对应图4,让整个a数组中红色矩形面积的元素再加上c,红色内的相当于被减了两次,再加上一次c,才能使其恢复。如果扩展到二维,我们需要让二维数组被选中的子矩阵中的每个元素的值加上。
2024-02-01 15:01:20
1288
原创 Acwing---797.差分
始终要记得,a数组是b数组的前缀和数组,比如对。以后区间的数相当于没有发生改变。个操作,每个操作包含三个整数。请你输出进行完所有操作后的序列。次这样的操作,时间复杂度就会变成。数组的前缀和数组,反过来我们把。数组,通过前缀和运算,就可以在。数组中从头开始的一段区间和。类似于数学中的求导和积分,,如果我们需要对原数组执行。有没有更高效的做法吗?(红色部分),但我们只要求。个整数,表示整数序列。行,每行包含三个整数。个整数,表示最终序列。区间中的每一个数都加上。(绿色部分),这样对于。区间中的每一个数都加上。
2024-02-01 13:54:31
1389
原创 Acwing---794. 高精度除法
BigInteger 只可用于整数构造方法将包含BigInteger的二进制补码二进制表达式的字节数组转换为BigInteger构造一个随机生成的BigInteger,均匀分布在0到(2 numBits - 1)的范围内。将BigInteger的十进制字符串表示形式转换为BigInteger。加法 add( )减法 subtract( )乘法 multiply( )除法 divideAndRemainder( )
2024-01-29 15:08:46
1015
原创 Acwing---792. 高精度减法
BigInteger 只可用于整数构造方法将包含BigInteger的二进制补码二进制表达式的字节数组转换为BigInteger构造一个随机生成的BigInteger,均匀分布在0到(2 numBits - 1)的范围内。将BigInteger的十进制字符串表示形式转换为BigInteger。加法 add( )减法 subtract( )乘法 multiply( )除法 divideAndRemainder( )
2024-01-29 15:01:51
505
原创 Acwing---793. 高精度乘法
BigInteger 只可用于整数构造方法将包含BigInteger的二进制补码二进制表达式的字节数组转换为BigInteger构造一个随机生成的BigInteger,均匀分布在0到(2 numBits - 1)的范围内。将BigInteger的十进制字符串表示形式转换为BigInteger。加法 add( )减法 subtract( )乘法 multiply( )除法 divideAndRemainder( )
2024-01-29 14:59:33
813
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人