AcWing
AcWing
Hunter_Kevin
这个作者很懒,什么都没留下…
展开
-
786. 第k个数
给定一个长度为 n 的整数数列,以及一个整数 k,请用快速选择算法求出数列从小到大排序后的第 k 个数。输入格式第一行包含两个整数 n 和 k。第二行包含 n 个整数(所有整数均在 1∼109 范围内),表示整数数列。输出格式输出一个整数,表示数列的第 k 小数。数据范围1≤k≤n输入样例:5 32 4 1 5 3输出样例:3。原创 2022-09-28 01:49:43 · 119 阅读 · 0 评论 -
897. 最长公共子序列
当子序列包含a[i]但不包含b[j]时,dp[i][j-1] 表示 所有 a[1~i] 和 b[1~j-1] 的所有公共子序列,涵盖了包含和不包含b[j]的情况,由取最大值的性质可知结果不变。当子序列不包含a[i]但包含b[j]时,dp[i-1][j] 表示 所有 a[1~i-1] 和 b[1~j] 的所有公共子序列,涵盖了包含和不包含a[i]的情况。当子序列包含a[i]和b[j]时,并且当a[i] == b[j]时,dp[i][j] == dp[i-1][j-1] + 1。输出一个整数,表示最大长度。原创 2022-09-19 21:01:24 · 224 阅读 · 0 评论 -
896. 最长上升子序列 II
二分数组,数组索引为子序列长度,存储的值为长度等于索引的所有子序列的末尾元素的最小值,这个数组满足严格单调递增的性质,因此可以二分查找出来该长度。给定一个长度为 N 的数列,求数值严格单调递增的子序列的长度最长是多少。第二行包含 N 个整数,表示完整序列。输出一个整数,表示最大长度。−109≤数列中的数≤109。第一行包含整数 N。原创 2022-09-19 02:12:58 · 197 阅读 · 0 评论 -
895. 最长上升子序列
给定一个长度为 N 的数列,求数值严格单调递增的子序列的长度最长是多少。第二行包含 N 个整数,表示完整序列。输出一个整数,表示最大长度。−109≤数列中的数≤109。第一行包含整数 N。原创 2022-09-18 11:20:58 · 117 阅读 · 0 评论 -
898. 数字三角形
给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。接下来 n 行,每行包含若干整数,其中第 i 行表示数字三角形第 i 层包含的整数。第一行包含整数 n,表示数字三角形的层数。−10000≤三角形中的整数≤10000。表示从第1层到第i层第j列的最大路径和。输出一个整数,表示最大的路径数字和。由上往下dp,需要对边界进行特判。从下往上dp,则不用处理边界问题。原创 2022-09-18 02:52:32 · 255 阅读 · 0 评论 -
9. 分组背包问题
每组数据接下来有 Si 行,每行有两个整数 vij,wij,用空格隔开,分别表示第 i 个物品组的第 j 个物品的体积和价值;每件物品的体积是 vij,价值是 wij,其中 i 是组号,j 是组内编号。求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。第一行有两个整数 N,V,用空格隔开,分别表示物品组数和背包容量。每组数据第一行有一个整数 Si,表示第 i 个物品组的物品数量;选第k个商品,k=k。每组物品有若干个,同一组内的物品最多只能选一个。输出一个整数,表示最大价值。原创 2022-09-11 12:46:32 · 354 阅读 · 0 评论 -
5. 多重背包问题 II
接下来有 N 行,每行三个整数 vi,wi,si,用空格隔开,分别表示第 i 种物品的体积、价值和数量。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。第 i 种物品最多有 si 件,每件体积是 vi,价值是 wi。第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。有 N 种物品和一个容量是 V 的背包。本题考查多重背包的二进制优化方法。输出一个整数,表示最大价值。原创 2022-09-10 16:16:22 · 130 阅读 · 0 评论 -
3. 完全背包问题
接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 种物品的体积和价值。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。有 N 种物品和一个容量是 V 的背包,每种物品都有无限件可用。第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。第 i 种物品的体积是 vi,价值是 wi。状态计算:状态式子展开,优化掉第三层循环遍历。从小到大枚举容量,该方式搭配滚动数组,执行时。输出一个整数,表示最大价值。是上一层的状态,相当于。是当前层的状态,相当于。原创 2022-09-09 20:50:09 · 88 阅读 · 0 评论 -
2. 01背包问题
接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 件物品的体积和价值。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。输出一个整数,表示最大价值。原创 2022-09-09 13:12:54 · 107 阅读 · 0 评论 -
861. 二分图的最大匹配
二分图的匹配:给定一个二分图 G,在 G 的一个子图 M 中,M 的边集 {E} 中的任意两条边都不依附于同一个顶点,则称 M 是一个匹配。给定一个二分图,其中左半部包含 n1 个点(编号 1∼n1),右半部包含 n2 个点(编号 1∼n2),二分图共包含 m 条边。接下来 m 行,每行包含两个整数 u 和 v,表示左半部点集中的点 u 和右半部点集中的点 v 之间存在一条边。二分图的最大匹配:所有匹配中包含边数最多的一组匹配被称为二分图的最大匹配,其边数即为最大匹配数。请你求出二分图的最大匹配数。原创 2022-09-08 17:18:41 · 105 阅读 · 0 评论 -
860. 染色法判定二分图
遍历图中的所有点,对各个连通块中的某个点进行dfs深搜染色,并判断连通块染色是否有矛盾。接下来 m 行,每行包含两个整数 u 和 v,表示点 u 和点 v 之间存在一条边。给定一个 n 个点 m 条边的无向图,图中可能存在重边和自环。如果给定图是二分图,则输出 Yes,否则输出 No。第一行包含两个整数 n 和 m。请你判断这个图是否是二分图。原创 2022-09-06 19:38:09 · 110 阅读 · 0 评论 -
859. Kruskal算法求最小生成树
由 V 中的全部 n 个顶点和 E 中 n−1 条边构成的无向连通子图被称为 G 的一棵生成树,其中边的权值之和最小的生成树被称为无向图 G 的最小生成树。共一行,若存在最小生成树,则输出一个整数,表示最小生成树的树边权重之和,如果最小生成树不存在则输出 impossible。给定一张边带权的无向图 G=(V,E),其中 V 表示图中点的集合,E 表示图中边的集合,n=|V|,m=|E|。求最小生成树的树边权重之和,如果最小生成树不存在则输出 impossible。3.用并查集判断是否成环。原创 2022-09-05 23:25:41 · 138 阅读 · 0 评论 -
858. Prim算法求最小生成树
由 V 中的全部 n 个顶点和 E 中 n−1 条边构成的无向连通子图被称为 G 的一棵生成树,其中边的权值之和最小的生成树被称为无向图 G 的最小生成树。共一行,若存在最小生成树,则输出一个整数,表示最小生成树的树边权重之和,如果最小生成树不存在则输出 impossible。4、特判,如果不是第一次迭代,并且查找到的点距离最小生成树集合距离为无穷大,则说明该点与生成树不连通,return。6、遍历不在最小生成树集合当中,并且与查找到的点相邻的点,更新相邻点到最小生成树集合的最短距离。原创 2022-09-05 17:55:52 · 133 阅读 · 0 评论 -
852. spfa判断负环
接下来 m 行每行包含三个整数 x,y,z,表示存在一条从点 x 到点 y 的有向边,边长为 z。给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环, 边权可能为负数。如果图中存在负权回路,则输出 Yes,否则输出 No。图中涉及边长绝对值均不超过 10000。请你判断图中是否存在负权回路。第一行包含整数 n 和 m。原创 2022-09-04 21:48:07 · 119 阅读 · 0 评论 -
851. spfa求最短路
请你求出 1 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点,则输出 impossible。接下来 m 行每行包含三个整数 x,y,z,表示存在一条从点 x 到点 y 的有向边,边长为 z。给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环, 边权可能为负数。输出一个整数,表示 1 号点到 n 号点的最短距离。如果路径不存在,则输出 impossible。图中涉及边长绝对值均不超过 10000。第一行包含整数 n 和 m。数据保证不存在负权回路。原创 2022-09-04 17:32:51 · 181 阅读 · 0 评论 -
854. Floyd求最短路
再给定 k 个询问,每个询问包含两个整数 x 和 y,表示查询从点 x 到点 y 的最短距离,如果路径不存在,则输出 impossible。接下来 m 行,每行包含三个整数 x,y,z,表示存在一条从点 x 到点 y 的有向边,边长为 z。共 k 行,每行输出一个整数,表示询问的结果,若询问两点间不存在路径,则输出 impossible。接下来 k 行,每行包含两个整数 x,y,表示询问点 x 到点 y 的最短距离。给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,边权可能为负数。原创 2022-09-04 14:55:12 · 87 阅读 · 0 评论 -
853. 有边数限制的最短路
请你求出从 1 号点到 n 号点的最多经过 k 条边的最短距离,如果无法从 1 号点走到 n 号点,输出 impossible。接下来 m 行,每行包含三个整数 x,y,z,表示存在一条从点 x 到点 y 的有向边,边长为 z。给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环, 边权可能为负数。输出一个整数,表示从 1 号点到 n 号点的最多经过 k 条边的最短距离。如果不存在满足条件的路径,则输出 impossible。Dijkstra不适用于求带有。点的编号为 1∼n。原创 2022-09-03 18:27:20 · 137 阅读 · 0 评论 -
850. Dijkstra求最短路 II
时间消耗最多的是遍历查找未处理的最短距离的节点,因此维护一个小根堆,查找的时间复杂度为O(1),一次插入并维护的时间复杂度为logN,总共插入m次,因此时间复杂度为O(mlogn)这题给的数据中点和边的数量差不多,是稀疏图,用邻接表进行存储,由于点的数量过多,会导致遍历未处理的最短距离节点的时候超时。请你求出 1 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点,则输出 −1。数据保证:如果最短路存在,则最短路的长度不超过 109。输出一个整数,表示 1 号点到 n 号点的最短距离。原创 2022-09-03 16:22:07 · 102 阅读 · 0 评论 -
849. Dijkstra求最短路 I
接下来 m 行每行包含三个整数 x,y,z,表示存在一条从点 x 到点 y 的有向边,边长为 z。请你求出 1 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点,则输出 −1。给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,所有边权均为正值。输出一个整数,表示 1 号点到 n 号点的最短距离。图中涉及边长均不超过10000。如果路径不存在,则输出 −1。第一行包含整数 n 和 m。原创 2022-09-02 11:54:51 · 177 阅读 · 0 评论 -
848. 有向图的拓扑序列
若一个由图中所有点构成的序列 A 满足:对于图中的每条边 (x,y),x 在 A 中都出现在 y 之前,则称 A 是该图的一个拓扑序列。接下来 m 行,每行包含两个整数 x 和 y,表示存在一条从点 x 到点 y 的有向边 (x,y)。给定一个 n 个点 m 条边的有向图,点的编号是 1 到 n,图中可能存在重边和自环。请输出任意一个该有向图的拓扑序列,如果拓扑序列不存在,则输出 −1。共一行,如果存在拓扑序列,则输出任意一个合法的拓扑序列即可。第一行包含两个整数 n 和 m。...原创 2022-08-31 10:28:30 · 446 阅读 · 0 评论 -
204. 表达整数的奇怪方式
给定 2n 个整数 a1,a2,…,an 和 m1,m2,…,mn,求一个最小的非负整数 x,满足 ∀i∈[1,n],x≡mi(mod ai)。n+1 行:每 i+1 行包含两个整数 ai 和 mi,数之间用空格隔开。如果存在 x,则数据保证 x 一定在 64 位整数范围内。输出最小非负整数 x,如果 x 不存在,则输出 −1。第 1 行包含整数 n。......原创 2022-08-15 17:08:09 · 220 阅读 · 0 评论 -
886. 求组合数 II
给定 n 组询问,每组询问给定两个整数 a,b,请你输出 Cbamod(109+7) 的值。接下来 n 行,每行包含一组 a 和 b。共 n 行,每行输出一个询问的解。第一行包含整数 n。原创 2022-08-15 11:34:33 · 106 阅读 · 0 评论 -
885. 求组合数 I
给定 n 组询问,每组询问给定两个整数 a,b,请你输出 Cbamod(109+7) 的值。接下来 n 行,每行包含一组 a 和 b。共 n 行,每行输出一个询问的解。第一行包含整数 n。原创 2022-08-14 17:49:55 · 115 阅读 · 0 评论 -
113. 特殊排序
然而,这是一道交互式试题,这些关系不能一次性得知,你必须通过不超过 10000 次提问来获取信息,每次提问只能了解某两个元素之间的关系。例如,编号为 a 和 b 的两个元素,如果元素 a 小于元素 b,则 compare(a,b) 返回 true,否则返回 false。N,每一对元素之间的大小关系是确定的,关系具有反对称性,但不具有传递性。将 N 个元素排好序后,把他们的编号以数组的形式输出,如果答案不唯一,则输出任意一个均可。现在请你把这 N 个元素排成一行,使得每个元素都小于右边与它相邻的元素。...原创 2022-08-14 14:08:54 · 154 阅读 · 0 评论 -
877. 扩展欧几里得算法
若整数 b,m 互质,并且对于任意的整数 a,如果满足 b|a,则存在一个整数 x,使得 a/b≡a×x(modm),则称 x 为 b 的模 m 乘法逆元,记为 b−1(modm)。给定 n 组 ai,pi,其中 pi 是质数,求 ai 模 pi 的乘法逆元,若逆元不存在则输出 impossible。当模数 m 为质数时,bm−2 即为 b 的乘法逆元。若 ai 模 pi 的乘法逆元存在,则输出一个整数,表示逆元,否则输出 impossible。输出共 n 行,每组数据输出一个结果,每个结果占一行。...原创 2022-08-14 14:07:33 · 161 阅读 · 0 评论 -
878. 线性同余方程
给定 n 组数据 ai,bi,mi,对于每组数求出一个 xi,使其满足 ai×xi≡bi(modmi),如果无解则输出 impossible。输出共 n 行,每组数据输出一个整数表示一个满足条件的 xi,如果无解则输出 impossible。每组数据结果占一行,结果可能不唯一,输出任意一个满足条件的结果均可。接下来 n 行,每行包含一组数据 ai,bi,mi。输出答案必须在 int 范围之内。第一行包含整数 n。...原创 2022-08-13 15:05:39 · 74 阅读 · 0 评论 -
877. 扩展欧几里得算法
给定 n 对正整数 ai,bi,对于每对数,求出一组 xi,yi,使其满足 ai×xi+bi×yi=gcd(ai,bi)。输出共 n 行,对于每组 ai,bi,求出一组满足条件的 xi,yi,每组结果占一行。本题答案不唯一,输出任意满足条件的 xi,yi 均可。接下来 n 行,每行包含两个整数 ai,bi。第一行包含整数 n。...原创 2022-08-12 18:51:56 · 101 阅读 · 0 评论 -
872. 最大公约数
给定 n 对正整数 ai,bi,请你求出每对数的最大公约数。接下来 n 行,每行包含一个整数对 ai,bi。输出共 n 行,每行输出一个整数对的最大公约数。第一行包含整数 n。原创 2022-08-12 11:45:53 · 102 阅读 · 0 评论 -
875. 快速幂
给定 n 组 ai,bi,pi,对于每组数据,求出 abiimodpi 的值。对于每组数据,输出一个结果,表示 abiimodpi 的值。接下来 n 行,每行包含三个整数 ai,bi,pi。第一行包含整数 n。原创 2022-08-11 21:00:40 · 96 阅读 · 0 评论 -
874. 筛法求欧拉函数
共一行,包含一个整数,表示 1∼n 中每个数的欧拉函数之和。给定一个正整数 n,求 1∼n 中每个数的欧拉函数之和。共一行,包含一个整数 n。原创 2022-08-10 01:19:46 · 247 阅读 · 0 评论 -
798. 差分矩阵
输入一个 n 行 m 列的整数矩阵,再输入 q 个操作,每个操作包含五个整数 x1,y1,x2,y2,c,其中 (x1,y1) 和 (x2,y2) 表示一个子矩阵的左上角坐标和右下角坐标。接下来 q 行,每行包含 5 个整数 x1,y1,x2,y2,c,表示一个操作。共 n 行,每行 m 个整数,表示所有操作进行完毕后的最终矩阵。每个操作都要将选中的子矩阵中的每个元素的值加上 c。接下来 n 行,每行包含 m 个整数,表示整数矩阵。请你将进行完所有操作后的矩阵输出。第一行包含整数 n,m,q。...原创 2022-08-09 20:09:58 · 99 阅读 · 0 评论 -
125. 耍杂技的牛
一头牛支撑不住的可能性取决于它头上所有牛的总重量(不包括它自己)减去它的身体强壮程度的值,现在称该数值为风险值,风险值越大,这只牛撑不住的可能性越高。接下来 N 行,每行输入两个整数,表示牛的重量和强壮程度,第 i 行表示第 i 头牛的重量 Wi 以及它的强壮程度 Si。这 N 头奶牛中的每一头都有着自己的重量 Wi 以及自己的强壮程度 Si。您的任务是确定奶牛的排序,使得所有奶牛的风险值中的最大值尽可能的小。叠罗汉,表演时,奶牛们站在彼此的身上,形成一个高高的垂直堆叠。第一行输入整数 N,表示奶牛数量。.原创 2022-08-09 16:49:03 · 121 阅读 · 0 评论 -
845. 八数码
在一个 3×3 的网格中,1∼8 这 8 个数字和一个 x 恰好不重不漏地分布在这 3×3 的网格中。例如,示例中图形就可以通过让 x 先后与右、下、右三个方向的数字交换成功得到正确排列。在游戏过程中,可以把 x 与其上、下、左、右四个方向之一的数字交换(如果存在)。现在,给你一个初始网格,请你求出得到正确排列至少需要进行多少次交换。输入占一行,将 3×3 的初始网格描绘出来。则输入为:1 2 3 x 4 6 7 5 8。输出占一行,包含一个整数,表示最少交换次数。如果不存在解决方案,则输出 −1。...原创 2022-08-07 00:55:36 · 121 阅读 · 0 评论 -
873. 欧拉函数
1∼N 中与 N 互质的数的个数被称为欧拉函数,记为 ϕ(N)。若在算数基本定理中,N=pa11pa22…输出共 n 行,每行输出一个正整数 ai 的欧拉函数。给定 n 个正整数 ai,请你求出每个数的欧拉函数。接下来 n 行,每行包含一个正整数 ai。第一行包含整数 n。...原创 2022-08-06 18:21:28 · 119 阅读 · 0 评论 -
907. 区间覆盖
给定 N 个闭区间 [ai,bi] 以及一个线段区间 [s,t],请你选择尽量少的区间,将指定线段区间完全覆盖。接下来 N 行,每行包含两个整数 ai,bi,表示一个区间的两个端点。第一行包含两个整数 s 和 t,表示给定线段区间的两个端点。输出最少区间数,如果无法完全覆盖则输出 −1。第二行包含整数 N,表示给定区间数。输出一个整数,表示所需最少区间数。如果无解,则输出 −1。...原创 2022-08-06 17:07:36 · 153 阅读 · 0 评论 -
906. 区间分组
给定 N 个闭区间 [ai,bi],请你将这些区间分成若干组,使得每组内部的区间两两之间(包括端点)没有交集,并使得组数尽可能小。接下来 N 行,每行包含两个整数 ai,bi,表示一个区间的两个端点。第一行包含整数 N,表示区间数。输出一个整数,表示最小组数。.........原创 2022-08-06 14:45:08 · 137 阅读 · 0 评论 -
905. 区间选点
给定 N 个闭区间 [ai,bi],请你在数轴上选择尽量少的点,使得每个区间内至少包含一个选出的点。接下来 N 行,每行包含两个整数 ai,bi,表示一个区间的两个端点。输出一个整数,表示所需的点的最小数量。位于区间端点上的点也算作区间内。第一行包含整数 N,表示区间数。输出选择的点的最小数量。......原创 2022-08-03 17:52:51 · 167 阅读 · 0 评论 -
102. 最佳牛围栏
农夫约翰的农场由 N 块田地组成,每块地里都有一定数量的牛,其数量不会少于 1 头,也不会超过 2000 头。约翰希望用围栏将一部分连续的田地围起来,并使得围起来的区域内每块地包含的牛的数量的平均值达到最大。接下来 N 行,每行输入一个整数,第 i+1 行输入的整数代表第 i 片区域内包含的牛的数目。输出一个整数,表示平均值的最大值乘以 1000 再 向下取整 之后得到的结果。在给定条件下,计算围起区域内每块地包含的牛的数量的平均值可能的最大值是多少。第一行输入整数 N 和 F,数据间用空格隔开。...原创 2022-08-03 01:47:24 · 225 阅读 · 0 评论 -
20. 用两个栈实现队列
你只能使用栈的标准操作pushtotop,peek/popfromtop,size和isempty;如果你选择的编程语言没有栈的标准库,你可以使用list或者deque等模拟栈的操作;维护两个栈,一个栈存储数据,另一个栈作为中转栈,满足队列的top、pop等操作。输入数据保证合法,例如,在队列为空时,不会进行pop或者peek等操作;pop()–将队首的元素弹出,并返回该元素;push(x)–将元素x插到队尾;empty()–返回队列是否为空;peek()–返回队首元素;...原创 2022-08-01 15:06:09 · 61 阅读 · 0 评论 -
790. 数的三次方根
共一行,包含一个浮点数,表示问题的解。给定一个浮点数n,求它的三次方根。共一行,包含一个浮点数n。注意,结果保留6位小数。原创 2022-08-01 12:49:12 · 136 阅读 · 0 评论