算法
算法基础
acacac.
这个作者很懒,什么都没留下…
展开
-
L2-3 完全二叉树的层序遍历 (25 分)
一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是完美二叉树。对于深度为 D 的,有 N 个结点的二叉树,若其结点对应于相同深度完美二叉树的层序遍历的前 N 个结点,这样的树就是完全二叉树。给定一棵完全二叉树的后序遍历,请你给出这棵树的层序遍历结果。输入格式:输入在第一行中给出正整数 N(≤30),即树中结点个数。第二行给出后序遍历序列,为 N 个不超过 100 的正整数。同一行中所有数字都以空格分隔。输出格式:在一行中输出该树的层序遍历序列。所有数字都以 1 个空格分隔,行首尾不得有原创 2022-04-20 18:06:15 · 146 阅读 · 0 评论 -
L2-2 小字辈 (25 分)
本题给定一个庞大家族的家谱,要请你给出最小一辈的名单。输入格式:输入在第一行给出家族人口总数 N(不超过 100 000 的正整数) —— 简单起见,我们把家族成员从 1 到 N 编号。随后第二行给出 N 个编号,其中第 i 个编号对应第 i 位成员的父/母。家谱中辈分最高的老祖宗对应的父/母编号为 -1。一行中的数字间以空格分隔。输出格式:首先输出最小的辈分(老祖宗的辈分为 1,以下逐级递增)。然后在第二行按递增顺序输出辈分最小的成员的编号。编号间以一个空格分隔,行首尾不得有多余空格。输入样例:原创 2022-04-18 21:24:25 · 227 阅读 · 0 评论 -
L2-1 分而治之 (25 分) vector数组的应用
分而治之,各个击破是兵家常用的策略之一。在战争中,我们希望首先攻下敌方的部分城市,使其剩余的城市变成孤立无援,然后再分头各个击破。为此参谋部提供了若干打击方案。本题就请你编写程序,判断每个方案的可行性。输入格式:输入在第一行给出两个正整数 N 和 M(均不超过10 000),分别为敌方城市个数(于是默认城市从 1 到 N 编号)和连接两城市的通路条数。随后 M 行,每行给出一条通路所连接的两个城市的编号,其间以一个空格分隔。在城市信息之后给出参谋部的系列方案,即一个正整数 K (≤ 100)和随后的 K原创 2022-04-18 20:54:10 · 116 阅读 · 0 评论 -
7-10 列车调度 (25 分)
火车站的列车调度铁轨的结构如下图所示。两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道。每趟列车从入口可以选择任意一条轨道进入,最后从出口离开。在图中有9趟列车,在入口处按照{8,4,2,5,3,9,1,6,7}的顺序排队等待进入。如果要求它们必须按序号递减的顺序从出口离开,则至少需要多少条平行铁轨用于调度?输入格式:输入第一行给出一个整数N (2 ≤ N ≤105),下一行给出从1到N的整数序号的一个重排列。数字间以空格分隔。输出格式:在一行中原创 2022-04-15 17:07:09 · 177 阅读 · 0 评论 -
KMP字符串
给定一个模式串 S,以及一个模板串 P,所有字符串中只包含大小写英文字母以及阿拉伯数字。模板串 P 在模式串 S 中多次作为子串出现。求出模板串 P 在模式串 S 中所有出现的位置的起始下标。输入格式第一行输入整数 N,表示字符串 P 的长度。第二行输入字符串 P。第三行输入整数 M,表示字符串 S 的长度。第四行输入字符串 S。输出格式共一行,输出所有出现位置的起始下标(下标从 0 开始计数),整数之间用空格隔开。数据范围1≤N≤1051≤M≤106输入样例:3aba5a原创 2022-04-08 16:13:09 · 150 阅读 · 0 评论 -
797. 差分
输入一个长度为 n 的整数序列。接下来输入 m 个操作,每个操作包含三个整数 l,r,c,表示将序列中 [l,r] 之间的每个数加上 c。请你输出进行完所有操作后的序列。输入格式第一行包含两个整数 n 和 m。第二行包含 n 个整数,表示整数序列。接下来 m 行,每行包含三个整数 l,r,c,表示一个操作。输出格式共一行,包含 n 个整数,表示最终序列。数据范围1≤n,m≤100000,1≤l≤r≤n,−1000≤c≤1000,−1000≤整数序列中元素的值≤1000输入样例:原创 2022-04-08 15:34:15 · 76 阅读 · 0 评论 -
898. 数字三角形
给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。 7 3 88 1 02 7 4 44 5 2 6 5输入格式第一行包含整数 n,表示数字三角形的层数。接下来 n 行,每行包含若干整数,其中第 i 行表示数字三角形第 i 层包含的整数。输出格式输出一个整数,表示最大的路径数字和。数据范围1≤n≤500,−10000≤三角原创 2022-03-31 17:34:17 · 347 阅读 · 0 评论 -
9. 分组背包问题
有 N 组物品和一个容量是 V 的背包。每组物品有若干个,同一组内的物品最多只能选一个。每件物品的体积是 vij,价值是 wij,其中 i 是组号,j 是组内编号。求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行有两个整数 N,V,用空格隔开,分别表示物品组数和背包容量。接下来有 N 组数据:每组数据第一行有一个整数 Si,表示第 i 个物品组的物品数量;每组数据接下来有 Si 行,每行有两个整数 vij,wij,用空格隔开,分别表示第 i原创 2022-03-31 15:37:53 · 333 阅读 · 0 评论 -
5. 多重背包问题 II
有 N 种物品和一个容量是 V 的背包。第 i 种物品最多有 si 件,每件体积是 vi,价值是 wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。接下来有 N 行,每行三个整数 vi,wi,si,用空格隔开,分别表示第 i 种物品的体积、价值和数量。输出格式输出一个整数,表示最大价值。数据范围0<N≤10000<V≤20000<vi,wi,si≤200原创 2022-03-30 18:35:09 · 72 阅读 · 0 评论 -
4. 多重背包问题 I
有 N 种物品和一个容量是 V 的背包。第 i 种物品最多有 si 件,每件体积是 vi,价值是 wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。接下来有 N 行,每行三个整数 vi,wi,si,用空格隔开,分别表示第 i 种物品的体积、价值和数量。输出格式输出一个整数,表示最大价值。数据范围0<N,V≤1000<vi,wi,si≤100输入样例4 51原创 2022-03-30 18:24:45 · 176 阅读 · 0 评论 -
3. 完全背包问题
有 N 种物品和一个容量是 V 的背包,每种物品都有无限件可用。第 i 种物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 种物品的体积和价值。输出格式输出一个整数,表示最大价值。数据范围0<N,V≤10000<vi,wi≤1000输入样例4 51 22原创 2022-03-30 16:17:23 · 292 阅读 · 0 评论 -
2. 01背包问题
有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 件物品的体积和价值。输出格式输出一个整数,表示最大价值。数据范围0<N,V≤10000<vi,wi≤1000输入样例4 51 22原创 2022-03-30 15:40:47 · 362 阅读 · 0 评论 -
872. 最大公约数
给定 n 对正整数 ai,bi,请你求出每对数的最大公约数。输入格式第一行包含整数 n。接下来 n 行,每行包含一个整数对 ai,bi。输出格式输出共 n 行,每行输出一个整数对的最大公约数。数据范围1≤n≤105,1≤ai,bi≤2×109输入样例:23 64 6输出样例:32#include<bits/stdc++.h>using namespace std;int n;int gcd(int a, int b){ return b ? gc原创 2022-03-29 13:20:50 · 318 阅读 · 0 评论 -
871. 约数之和
给定 n 个正整数 ai,请你输出这些数的乘积的约数之和,答案对 109+7 取模。输入格式第一行包含整数 n。接下来 n 行,每行包含一个整数 ai。输出格式输出一个整数,表示所给正整数的乘积的约数之和,答案需对 109+7 取模。数据范围1≤n≤100,1≤ai≤2×109输入样例:3268输出样例:252任何一个数N分解完质因数N = p1a1 * p2a2 * …pnan;约数之和 = (p10+p21+…+p1a1) …(pk0+pk1+…+pkak);#inc原创 2022-03-29 13:16:00 · 357 阅读 · 0 评论 -
870. 约数个数
给定 n 个正整数 ai,请你输出这些数的乘积的约数个数,答案对 109+7 取模。输入格式第一行包含整数 n。接下来 n 行,每行包含一个整数 ai。输出格式输出一个整数,表示所给正整数的乘积的约数个数,答案需对 109+7 取模。数据范围1≤n≤100,1≤ai≤2×109输入样例:3268输出样例:12任何一个数N分解完质因数N = p1a1 * p2a2 * …pnan;约数个数 = (a1+1)(a2+1) …*(an+1);#include<bits/s原创 2022-03-28 21:21:35 · 637 阅读 · 0 评论 -
2041. 干草堆
贝茜对她最近在农场周围造成的一切恶作剧感到抱歉,她同意帮助农夫约翰把一批新到的干草捆堆起来。开始时,共有 N 个空干草堆,编号 1∼N。约翰给贝茜下达了 K 个指令,每条指令的格式为 A B,这意味着贝茜要在 A…B 范围内的每个干草堆的顶部添加一个新的干草捆。例如,如果贝茜收到指令 10 13,则她应在干草堆 10,11,12,13 中各添加一个干草捆。在贝茜完成了所有指令后,约翰想知道 N 个干草堆的中值高度——也就是说,如果干草堆按照高度从小到大排列,位于中间的干草堆的高度。方便起见,N 一原创 2022-01-20 20:08:41 · 222 阅读 · 0 评论 -
2058. 笨拙的手指
奶牛贝茜正在学习如何在不同进制之间转换数字。但是她总是犯错误,因为她无法轻易的用两个前蹄握住笔。每当贝茜将数字转换为一个新的进制并写下结果时,她总是将其中的某一位数字写错。例如,如果她将数字 14 转换为二进制数,那么正确的结果应为 1110,但她可能会写下 0110 或 1111。贝茜不会额外添加或删除数字,但是可能会由于写错数字的原因,写下包含前导 0 的数字。给定贝茜将数字 N 转换为二进制数字以及三进制数字的结果,请确定 N 的正确初始值(十进制表示)。输入格式第一行包含 N 的二进制原创 2022-01-20 16:41:22 · 59 阅读 · 0 评论 -
868. 筛质数
给定一个正整数 n,请你求出 1∼n 中质数的个数。输入格式共一行,包含整数 n。输出格式共一行,包含一个整数,表示 1∼n 中质数的个数。数据范围1≤n≤106输入样例:8输出样例:4方法一: 朴素筛法:#include<bits/stdc++.h>using namespace std;const int N = 1000010;int primes[N], cnt;int st[N];void get_pirmes(int n){ for(i原创 2021-11-24 12:30:08 · 312 阅读 · 0 评论 -
861. 二分图的最大匹配
给定一个二分图,其中左半部包含 n1 个点(编号 1∼n1),右半部包含 n2 个点(编号 1∼n2),二分图共包含 m 条边。数据保证任意一条边的两个端点都不可能在同一部分中。请你求出二分图的最大匹配数。二分图的匹配:给定一个二分图 G,在 G 的一个子图 M 中,M 的边集 {E} 中的任意两条边都不依附于同一个顶点,则称 M 是一个匹配。二分图的最大匹配:所有匹配中包含边数最多的一组匹配被称为二分图的最大匹配,其边数即为最大匹配数。输入格式第一行包含三个整数 n1、 n2 和 m。接下来原创 2021-11-18 13:31:21 · 70 阅读 · 0 评论 -
867. 分解质因数
给定 n 个正整数 ai,将每个数分解质因数,并按照质因数从小到大的顺序输出每个质因数的底数和指数。输入格式第一行包含整数 n。接下来 n 行,每行包含一个正整数 ai。输出格式对于每个正整数 ai,按照从小到大的顺序输出其分解质因数后,每个质因数的底数和指数,每个底数和指数占一行。每个正整数的质因数全部输出完毕后,输出一个空行。数据范围1≤n≤100,1≤ai≤2×109输入样例:268输出样例:2 13 12 3#include <iostream>#i原创 2021-11-18 13:30:10 · 128 阅读 · 0 评论 -
860. 染色法判定二分图
给定一个 n 个点 m 条边的无向图,图中可能存在重边和自环。请你判断这个图是否是二分图。输入格式第一行包含两个整数 n 和 m。接下来 m 行,每行包含两个整数 u 和 v,表示点 u 和点 v 之间存在一条边。输出格式如果给定图是二分图,则输出 Yes,否则输出 No。数据范围1≤n,m≤105输入样例:4 41 31 42 32 4输出样例:Yes#include <cstring>#include <iostream>#include原创 2021-11-14 16:39:27 · 197 阅读 · 0 评论 -
845. 八数码
在一个 3×3 的网格中,1∼8 这 8 个数字和一个 x 恰好不重不漏地分布在这 3×3 的网格中。例如:1 2 3x 4 67 5 8在游戏过程中,可以把 x 与其上、下、左、右四个方向之一的数字交换(如果存在)。我们的目的是通过交换,使得网格变为如下排列(称为正确排列):1 2 34 5 67 8 x例如,示例中图形就可以通过让 x 先后与右、下、右三个方向的数字交换成功得到正确排列。交换过程如下:1 2 3 1 2 3 1 2 3 1 2 3x 4 6 4原创 2021-11-14 15:50:42 · 69 阅读 · 0 评论 -
859. Kruskal算法求最小生成树
给定一个 n 个点 m 条边的无向图,图中可能存在重边和自环,边权可能为负数。求最小生成树的树边权重之和,如果最小生成树不存在则输出 impossible。给定一张边带权的无向图 G=(V,E),其中 V 表示图中点的集合,E 表示图中边的集合,n=|V|,m=|E|。由 V 中的全部 n 个顶点和 E 中 n−1 条边构成的无向连通子图被称为 G 的一棵生成树,其中边的权值之和最小的生成树被称为无向图 G 的最小生成树。输入格式第一行包含两个整数 n 和 m。接下来 m 行,每行包含三个整数原创 2021-09-06 16:12:10 · 76 阅读 · 0 评论 -
858. Prim算法求最小生成树
给定一个 n 个点 m 条边的无向图,图中可能存在重边和自环,边权可能为负数。求最小生成树的树边权重之和,如果最小生成树不存在则输出 impossible。给定一张边带权的无向图 G=(V,E),其中 V 表示图中点的集合,E 表示图中边的集合,n=|V|,m=|E|。由 V 中的全部 n 个顶点和 E 中 n−1 条边构成的无向连通子图被称为 G 的一棵生成树,其中边的权值之和最小的生成树被称为无向图 G 的最小生成树。输入格式第一行包含两个整数 n 和 m。接下来 m 行,每行包含三个整数原创 2021-09-01 17:35:32 · 264 阅读 · 0 评论 -
854. Floyd求最短路
给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,边权可能为负数。再给定 k 个询问,每个询问包含两个整数 x 和 y,表示查询从点 x 到点 y 的最短距离,如果路径不存在,则输出 impossible。数据保证图中不存在负权回路。输入格式第一行包含三个整数 n,m,k。接下来 m 行,每行包含三个整数 x,y,z,表示存在一条从点 x 到点 y 的有向边,边长为 z。接下来 k 行,每行包含两个整数 x,y,表示询问点 x 到点 y 的最短距离。输出格式共 k 行,每行输出一原创 2021-08-30 11:55:11 · 88 阅读 · 0 评论 -
852. spfa判断负环
给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环, 边权可能为负数。请你判断图中是否存在负权回路。输入格式第一行包含整数 n 和 m。接下来 m 行每行包含三个整数 x,y,z,表示存在一条从点 x 到点 y 的有向边,边长为 z。输出格式如果图中存在负权回路,则输出 Yes,否则输出 No。数据范围1≤n≤2000,1≤m≤10000,图中涉及边长绝对值均不超过 10000。输入样例:3 31 2 -12 3 43 1 -4输出样例:Yes#include&原创 2021-08-30 11:35:21 · 71 阅读 · 0 评论 -
853. 有边数限制的最短路
给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环, 边权可能为负数。请你求出从 1 号点到 n 号点的最多经过 k 条边的最短距离,如果无法从 1 号点走到 n 号点,输出 impossible。注意:图中可能 存在负权回路 。输入格式第一行包含三个整数 n,m,k。接下来 m 行,每行包含三个整数 x,y,z,表示存在一条从点 x 到点 y 的有向边,边长为 z。输出格式输出一个整数,表示从 1 号点到 n 号点的最多经过 k 条边的最短距离。如果不存在满足条件的路径,则输出原创 2021-08-30 11:34:34 · 99 阅读 · 0 评论 -
851. spfa求最短路
给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环, 边权可能为负数。请你求出 1 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点,则输出 impossible。数据保证不存在负权回路。输入格式第一行包含整数 n 和 m。接下来 m 行每行包含三个整数 x,y,z,表示存在一条从点 x 到点 y 的有向边,边长为 z。输出格式输出一个整数,表示 1 号点到 n 号点的最短距离。如果路径不存在,则输出 impossible。数据范围1≤n,m≤105,图中涉及边原创 2021-08-30 11:33:42 · 50 阅读 · 0 评论 -
850. Dijkstra求最短路 II +堆优化版
给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,所有边权均为非负值。请你求出 1 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点,则输出 −1。输入格式第一行包含整数 n 和 m。接下来 m 行每行包含三个整数 x,y,z,表示存在一条从点 x 到点 y 的有向边,边长为 z。输出格式输出一个整数,表示 1 号点到 n 号点的最短距离。如果路径不存在,则输出 −1。数据范围1≤n,m≤1.5×105,图中涉及边长均不小于 0,且不超过 10000。输入样例原创 2021-08-28 11:11:30 · 69 阅读 · 0 评论 -
849. Dijkstra求最短路 I + 朴素版
给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,所有边权均为正值。请你求出 1 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点,则输出 −1。输入格式第一行包含整数 n 和 m。接下来 m 行每行包含三个整数 x,y,z,表示存在一条从点 x 到点 y 的有向边,边长为 z。输出格式输出一个整数,表示 1 号点到 n 号点的最短距离。如果路径不存在,则输出 −1。数据范围1≤n≤500,1≤m≤105,图中涉及边长均不超过10000。输入样例:3 3原创 2021-08-28 10:50:28 · 63 阅读 · 0 评论 -
848. 有向图的拓扑序列
给定一个 n 个点 m 条边的有向图,点的编号是 1 到 n,图中可能存在重边和自环。请输出任意一个该有向图的拓扑序列,如果拓扑序列不存在,则输出 −1。若一个由图中所有点构成的序列 A 满足:对于图中的每条边 (x,y),x 在 A 中都出现在 y 之前,则称 A 是该图的一个拓扑序列。输入格式第一行包含两个整数 n 和 m。接下来 m 行,每行包含两个整数 x 和 y,表示存在一条从点 x 到点 y 的有向边 (x,y)。输出格式共一行,如果存在拓扑序列,则输出任意一个合法的拓扑序列即可。原创 2021-08-23 21:51:59 · 150 阅读 · 0 评论 -
847. 图中点的层次 + BFS
图中点的层次题目提交记录讨论题解视频讲解给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环。所有边的长度都是 1,点的编号为 1∼n。请你求出 1 号点到 n 号点的最短距离,如果从 1 号点无法走到 n 号点,输出 −1。输入格式第一行包含两个整数 n 和 m。接下来 m 行,每行包含两个整数 a 和 b,表示存在一条从 a 走到 b 的长度为 1 的边。输出格式输出一个整数,表示 1 号点到 n 号点的最短距离。数据范围1≤n,m≤105输入样例:4 5.原创 2021-08-23 21:50:21 · 71 阅读 · 0 评论 -
846. 树的重心 +DFS
给定一颗树,树中包含 n 个结点(编号 1∼n)和 n−1 条无向边。请你找到树的重心,并输出将重心删除后,剩余各个连通块中点数的最大值。重心定义:重心是指树中的一个结点,如果将这个点删除后,剩余各个连通块中点数的最大值最小,那么这个节点被称为树的重心。输入格式第一行包含整数 n,表示树的结点数。接下来 n−1 行,每行包含两个整数 a 和 b,表示点 a 和点 b 之间存在一条边。输出格式输出一个整数 m,表示将重心删除后,剩余各个连通块中点数的最大值。数据范围1≤n≤105输入样例原创 2021-08-23 21:49:03 · 81 阅读 · 0 评论 -
844. 走迷宫 + BFS
给定一个 n×m 的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0 表示可以走的路,1 表示不可通过的墙壁。最初,有一个人位于左上角 (1,1) 处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。请问,该人从左上角移动至右下角 (n,m) 处,至少需要移动多少次。数据保证 (1,1) 处和 (n,m) 处的数字为 0,且一定至少存在一条通路。输入格式第一行包含两个整数 n 和 m。接下来 n 行,每行包含 m 个整数(0 或 1),表示完整的二维数组迷宫。输出格原创 2021-08-23 21:45:18 · 3407 阅读 · 1 评论 -
843. n-皇后问 决策树
n−皇后问题是指将 n 个皇后放在 n×n 的国际象棋棋盘上,使得皇后不能相互攻击到,即任意两个皇后都不能处于同一行、同一列或同一斜线上。1_597ec77c49-8-queens.png现在给定整数 n,请你输出所有的满足条件的棋子摆法。输入格式共一行,包含整数 n。输出格式每个解决方案占 n 行,每行输出一个长度为 n 的字符串,用来表示完整的棋盘状态。其中 . 表示某一个位置的方格状态为空,Q 表示某一个位置的方格上摆着皇后。每个方案输出完成后,输出一个空行。注意:行末不能有多余空格原创 2021-08-21 13:52:40 · 163 阅读 · 0 评论 -
842. 排列数字 + DFS 决策树
给定一个整数 n,将数字 1∼n 排成一排,将会有很多种排列方法。现在,请你按照字典序将所有的排列方法输出。输入格式共一行,包含一个整数 n。输出格式按字典序输出所有排列方案,每个方案占一行。数据范围1≤n≤7输入样例:3输出样例:1 2 31 3 22 1 32 3 13 1 23 2 1#include<bits/stdc++.h>using namespace std;const int N = 10;int n;int path[N];bool原创 2021-08-21 08:52:10 · 77 阅读 · 0 评论 -
831. KMP字符串 +字符串哈希法解KMP
给定一个模式串 S,以及一个模板串 P,所有字符串中只包含大小写英文字母以及阿拉伯数字。模板串 P 在模式串 S 中多次作为子串出现。求出模板串 P 在模式串 S 中所有出现的位置的起始下标。输入格式第一行输入整数 N,表示字符串 P 的长度。第二行输入字符串 P。第三行输入整数 M,表示字符串 S 的长度。第四行输入字符串 S。输出格式共一行,输出所有出现位置的起始下标(下标从 0 开始计数),整数之间用空格隔开。数据范围1≤N≤1051≤M≤106输入样例:3aba5a原创 2021-08-20 10:41:28 · 103 阅读 · 0 评论 -
841. 字符串哈希
给定一个长度为 n 的字符串,再给定 m 个询问,每个询问包含四个整数 l1,r1,l2,r2,请你判断 [l1,r1] 和 [l2,r2] 这两个区间所包含的字符串子串是否完全相同。字符串中只包含大小写英文字母和数字。输入格式第一行包含整数 n 和 m,表示字符串长度和询问次数。第二行包含一个长度为 n 的字符串,字符串中只包含大小写英文字母和数字。接下来 m 行,每行包含四个整数 l1,r1,l2,r2,表示一次询问所涉及的两个区间。注意,字符串的位置从 1 开始编号。输出格式对于每个询原创 2021-08-20 10:22:56 · 112 阅读 · 0 评论 -
840. 模拟散列表
维护一个集合,支持如下几种操作:I x,插入一个数 x;Q x,询问数 x 是否在集合中出现过;现在要进行 N 次操作,对于每个询问操作输出对应的结果。输入格式第一行包含整数 N,表示操作数量。接下来 N 行,每行包含一个操作指令,操作指令为 I x,Q x 中的一种。输出格式对于每个询问指令 Q x,输出一个询问结果,如果 x 在集合中出现过,则输出 Yes,否则输出 No。每个结果占一行。数据范围1≤N≤105−109≤x≤109输入样例:5I 1I 2I 3Q 2原创 2021-08-19 21:22:05 · 52 阅读 · 0 评论 -
838. 堆排序 + 用数组模拟堆
输入一个长度为 n 的整数数列,从小到大输出前 m 小的数。输入格式第一行包含整数 n 和 m。第二行包含 n 个整数,表示整数数列。输出格式共一行,包含 m 个整数,表示整数数列中前 m 小的数。数据范围1≤m≤n≤105,1≤数列中元素≤109输入样例:5 34 5 1 3 2输出样例:1 2 3#include<bits/stdc++.h>using namespace std;const int N = 100010;int h[N], idx;v原创 2021-08-19 11:04:37 · 84 阅读 · 0 评论