
数据结构
dankon
这个作者很懒,什么都没留下…
展开
-
快速排序代码
例题给定一个长度为 n 的整数数列,以及一个整数 k,请用快速选择算法求出数列从小到大排序后的第 k 个数。输入格式第一行包含两个整数 n 和 k。第二行包含 n 个整数(所有整数均在 1∼109 范围内),表示整数数列。输出格式输出一个整数,表示数列的第 k 小数。数据范围1≤n≤100000,1≤k≤n输入样例:5 32 4 1 5 3输出样例:3代码#include<iostream>#include<algorithm>using原创 2022-04-01 17:38:13 · 212 阅读 · 0 评论 -
你知道你的ABC吗
你知道你的ABC吗Farmer John 的奶牛正在 mooZ 视频会议平台上举行每日集会。她们发明了一个简单的数字游戏,为会议增添一些乐趣。Elsie 有三个正整数 A、B 和 C (A≤B≤C)。这些数字是保密的,她不会直接透露给她的姐妹 Bessie。她告诉 Bessie 七个范围在 1…109 之间的整数(不一定各不相同),并宣称这是 A、B、C、A+B、B+C、C+A 和 A+B+C 的某种排列。给定这七个整数,请帮助 Bessie 求出 A、B 和 C。可以证明,答案是唯一的。输原创 2022-04-01 17:12:45 · 199 阅读 · 0 评论 -
问题 C: 迷宫
迷宫题目描述给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,zzx想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,zzx可以穿越,有些地方是障碍,他必须绕行,从迷宫的一个位置,只能走到与它相邻的4个位置中,当然在行走过程中,zzx不能走到迷宫外面去。令人头痛的是,zzx是个没什么方向感的人,因此,他在行走过程中,不能转太多弯了,否则他会晕倒的。我们假定给定的两个位置都是空地,初始时,zzx所面向的方向未定,他可以选择4个方向的任何一个出发,而不算成一次转弯。zzx能从一个位置原创 2022-03-27 14:48:58 · 658 阅读 · 0 评论 -
欧拉函数的定义
欧拉函数给定 n 个正整数 ai,请你求出每个数的欧拉函数。欧拉函数的定义1∼N 中与 N 互质的数的个数被称为欧拉函数,记为 ϕ(N)。若在算数基本定理中,N=pa11pa22…pamm,则:ϕ(N) = N×p1−1p1×p2−1p2×…×pm−1pm输入格式第一行包含整数 n。接下来 n 行,每行包含一个正整数 ai。输出格式输出共 n 行,每行输出一个正整数 ai 的欧拉函数。数据范围1≤n≤100,1≤ai≤2×109输入样例:3368输出样例:22原创 2021-12-10 19:06:58 · 971 阅读 · 0 评论 -
并查集-格子游戏
并查集-格子游戏题目描述Alice和Bob玩了一个古老的游戏:首先画一个n*n的点阵(下图中n=3),接着他们两个轮流在相邻的点之间画上虚边和粗边:直到围成一个封闭的圈(面积不必为1)为止,“封圈”的那个人就是赢家。因为棋盘实在是太大了(n<=200),他们的游戏实在是长了!他们甚至在游戏中都不知道谁赢得了游戏。于是请你写一个程序,帮助他们计算他们是否结束了游戏?输入每组输入数据第一行为两个整数n和m。m表示一共画了m条线。以后m行,每行首先有两个数字(x,y),代表了画线的起点坐标,接着用原创 2021-11-26 20:52:18 · 3165 阅读 · 0 评论 -
并查集-团伙
并查集-团伙题目描述在某城市里住着 n 个人,任何两个认识的人不是朋友就是敌人,而且满足: 1、我朋友的朋友是我的朋友; 2、我敌人的敌人是我的朋友; 所有是朋友的人组成一个团伙。告诉你关于这 n 个人的 m 条信息,即某两个人是朋友, 或者某两个人是敌人,请你编写一个程序,计算出这个城市多可能有多少个团伙?输入第 1 行为 n 和 m,1<n<1000,1<=m<=100 000; 以下 m 行,每行为 p x y,p 的值为 0 或 1,p 为 0 时,表示 x 和 y原创 2021-11-24 11:39:58 · 363 阅读 · 0 评论 -
并查集-搭配购买
并查集-搭配购买题目描述Joe 觉得云朵很美,决定去山上的商店买一些云朵。商店里有 n 朵云,云朵被编号为 1, 2,……,n,并且每朵云都有一个价值。但是商店老板跟他说,一些云朵要搭配来买才好, 所以买一朵云则与这朵云有搭配的云都要买。 但是 Joe 的钱有限,所以他希望买的价值越多越好。输入第 1 行 n,m,w(1<n,m,w<=1000),表示 n 朵云,m 个搭配,Joe 有 w 的钱。 第 2~n+1 行,每行 ci,di 表示 i 朵云的价钱和价值。原创 2021-11-23 14:16:29 · 187 阅读 · 0 评论 -
山峰和山谷
题目描述给定一个 n×n的网格状地图,每个方格 (i,j)有一个高度 wij 。如果两个方格有公共顶点,则它们是相邻的。定义山峰和山谷如下:均由地图上的一个连通块组成;所有方格高度都相同;周围的方格(即不属于山峰或山谷但与山峰或山谷相邻的格子)高度均大于山谷的高度,或小于山峰的高度。求地图内山峰和山谷的数量。特别地,如果整个地图方格的高度均相同,则整个地图既是一个山谷,也是一个山峰。输入第一行一个整数 n(2≤n≤1000),表示地图的大小。接下来 n行每行 n个整数表示地图。第 i行原创 2021-11-16 16:47:57 · 1332 阅读 · 0 评论 -
迷宫探险(升级)
迷宫探险(升级)题目描述探险家小曹来到了一个N*N的迷宫,起点是左上角(1,1),终点是右下角(N,N)。迷宫由通道,障碍物和墙壁组成,每一步可以花费单位时间向邻接的上下左右四格的通道移动, 也可以从通道移动到障碍物,清除障碍物需要一定的时间。请求出从起点到终点所需的最少时间。输入输入有多组数据,不超过10组。每组第一行一个整数N(1<=N<=100)。第2~N+1行表示迷宫,每行有N个字符。字符# .分别代表墙壁、通道。保证起点(1,1)和终点(N,N)都是通道。字符’1’~'9原创 2021-11-03 12:03:33 · 653 阅读 · 0 评论 -
844.走迷宫
给定一个 n×m 的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0 表示可以走的路,1 表示不可通过的墙壁。最初,有一个人位于左上角 (1,1) 处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。请问,该人从左上角移动至右下角 (n,m) 处,至少需要移动多少次。数据保证 (1,1) 处和 (n,m) 处的数字为 0,且一定至少存在一条通路。输入格式第一行包含两个整数 n 和 m。接下来 n 行,每行包含 m 个整数(0 或 1),表示完整的二维数组迷宫。输出格原创 2021-11-03 11:24:11 · 147 阅读 · 0 评论 -
常用位运算的操作
位运算n的二进制表示中第k位是几1、先把第k位移到最后一位 (位移)n >> k;2、看个位是几x&1;总结:n >> k & 1;lowbit(x) 返回x的最后一位1x = 1010;lowbit(x) = 10;x = 10100;lowbit(x) = 100;实现原理x&-x;作用:可以统计x里面有多少1...原创 2021-09-09 09:26:00 · 119 阅读 · 0 评论 -
归并排序-逆序对
归并排序思路:1、[L,R] => [L,mid],[mid+1,R]2、递归排序[L,mid]和[mid+1,R]3、归并,将左右两个有序序列合并成一个有序序列习题1 归并排序给定你一个长度为 n 的整数数列。请你使用归并排序对这个数列按照从小到大进行排序。并将排好序的数列按顺序输出。输入格式输入共两行,第一行包含整数 n。第二行包含 n 个整数(所有整数均在 1∼109 范围内),表示整个数列。输出格式输出共一行,包含 n 个整数,表示排好序的数列。数据范围1≤n≤原创 2021-09-01 17:37:46 · 120 阅读 · 0 评论 -
快速排序-快速选择
快速排序思路:1、找到分界点x,q[L],q[(L+R)/2],q[R]2、左边所有数Left <= x,右边所有数Right >=x3、递归排序Left,递归排序Right题目1 快速排序给定你一个长度为 n 的整数数列。请你使用快速排序对这个数列按照从小到大进行排序。并将排好序的数列按顺序输出。输入格式输入共两行,第一行包含整数 n。第二行包含 n 个整数(所有整数均在 1∼109 范围内),表示整个数列。输出格式输出共一行,包含 n 个整数,表示排好序的数列原创 2021-09-01 13:48:48 · 205 阅读 · 0 评论 -
差分矩阵问题
输入一个 n 行 m 列的整数矩阵,再输入 q 个操作,每个操作包含五个整数 x1,y1,x2,y2,c,其中 (x1,y1) 和 (x2,y2) 表示一个子矩阵的左上角坐标和右下角坐标。每个操作都要将选中的子矩阵中的每个元素的值加上 c。请你将进行完所有操作后的矩阵输出。输入格式第一行包含整数 n,m,q。接下来 n 行,每行包含 m 个整数,表示整数矩阵。接下来 q 行,每行包含 5 个整数 x1,y1,x2,y2,c,表示一个操作。输出格式共 n 行,每行 m 个整数,表示所有操作进行原创 2021-08-29 19:31:11 · 179 阅读 · 0 评论 -
差分的运算
差分输入一个长度为 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输入原创 2021-08-29 18:38:38 · 842 阅读 · 0 评论 -
子矩阵的和
子矩阵的和输入一个 n 行 m 列的整数矩阵,再输入 q 个询问,每个询问包含四个整数 x1,y1,x2,y2,表示一个子矩阵的左上角坐标和右下角坐标。对于每个询问输出子矩阵中所有数的和。输入格式第一行包含三个整数 n,m,q。接下来 n 行,每行包含 m 个整数,表示整数矩阵。接下来 q 行,每行包含四个整数 x1,y1,x2,y2,表示一组询问。输出格式共 q 行,每行输出一个询问的结果。数据范围1≤n,m≤1000,1≤q≤200000,1≤x1≤x2≤n,1≤y1≤y2≤m原创 2021-08-29 15:12:48 · 210 阅读 · 0 评论 -
前缀和计算
前缀和输入一个长度为 n 的整数序列。接下来再输入 m 个询问,每个询问输入一对 l,r。对于每个询问,输出原序列中从第 l 个数到第 r 个数的和。输入格式第一行包含两个整数 n 和 m。第二行包含 n 个整数,表示整数数列。接下来 m 行,每行包含两个整数 l 和 r,表示一个询问的区间范围。输出格式共 m 行,每行输出一个询问的结果。数据范围1≤l≤r≤n,1≤n,m≤100000,−1000≤数列中元素的值≤1000输入样例:5 32 1 3 6 41 21 3原创 2021-08-29 14:36:06 · 177 阅读 · 0 评论 -
高精度除法
高精度除法给定两个非负整数 A,B,请你计算 A/B 的商和余数。输入格式共两行,第一行包含整数 A,第二行包含整数 B。输出格式共两行,第一行输出所求的商,第二行输出所求余数。数据范围1≤A的长度≤100000,1≤B≤10000,B 一定不为 0输入样例:72输出样例:31代码:#include<iostream>#include<vector>#include<algorithm>using namespace std;原创 2021-08-29 14:09:08 · 341 阅读 · 0 评论 -
高精度乘法
高精度乘法给定两个非负整数 A 和 B,请你计算 A×B 的值。输入格式共两行,第一行包含整数 A,第二行包含整数 B。输出格式共一行,包含 A×B 的值。数据范围1≤A的长度≤100000,0≤B≤10000输入样例:23输出样例:6代码:#include<iostream>#include<vector>using namespace std;vector<int> mul(vector<int> A,int b原创 2021-08-29 13:50:57 · 148 阅读 · 0 评论 -
高精度减法
高精度减法给定两个正整数,计算它们的差,计算结果可能为负数。输入格式共两行,每行包含一个整数。输出格式共一行,包含所求的差。数据范围1≤整数长度≤105输入样例:3211输出样例:21代码:#include<iostream>#include<vector>using namespace std;const int N = 1e6 + 10;bool cmp(vector<int> &A,vector<int>原创 2021-08-29 11:51:12 · 98 阅读 · 0 评论 -
高精度加法
高精度加法给定两个正整数,计算它们的和。输入格式共两行,每行包含一个整数。输出格式共一行,包含所求的和。数据范围1≤整数长度≤100000输入样例:1223输出样例:35代码:#include<iostream>#include<vector>using namespace std;const int N = 1e6 + 10;vector<int> add(vector<int> &A,vector<原创 2021-08-29 10:59:44 · 194 阅读 · 0 评论 -
回文平方
回文平方回文数是指数字从前往后读和从后往前读都相同的数字。例如数字 12321 就是典型的回文数字。现在给定你一个整数 B,请你判断 1∼300 之间的所有整数中,有哪些整数的平方转化为 B 进制后,其 B 进制表示是回文数字。输入格式一个整数 B。输出格式每行包含两个在 B 进制下表示的数字。第一个表示满足平方值转化为 B 进制后是回文数字那个数,第二个数表示第一个数的平方。所有满足条件的数字按从小到大顺序依次输出。数据范围2≤B≤20,对于大于 9 的数字,用 A 表示 10,原创 2021-02-14 13:01:31 · 139 阅读 · 0 评论 -
红与黑
红与黑有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻(上下左右四个方向)的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的瓷砖。输入格式输入包括多个数据集合。每个数据集合的第一行是两个整数 W 和 H,分别表示 x 方向和 y 方向瓷砖的数量。在接下来的 H 行中,每行包括 W 个字符。每个字符表示一块瓷砖的颜色,规则如下1)‘.’:黑色的瓷砖;2)‘#’:红色的瓷砖;3)‘@’:黑色的瓷砖,并且你站在这块瓷砖上。该字符在每个原创 2021-02-13 15:10:17 · 181 阅读 · 1 评论 -
蛇形矩阵
蛇形矩阵输入两个整数n和m,输出一个n行m列的矩阵,将数字 1 到 n*m 按照回字蛇形填充至矩阵中。具体矩阵形式可参考样例。输入格式输入共一行,包含两个整数n和m。输出格式输出满足要求的矩阵。矩阵占n行,每行包含m个空格隔开的整数。数据范围1≤n,m≤100输入样例:3 3输出样例:1 2 38 9 47 6 5题目分析将每个方向的偏移量放在dx和dy数组内C++代码#include<iostream> using namespace std;原创 2021-02-10 14:04:31 · 246 阅读 · 0 评论 -
数字三角形
数字三角形给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。 7 3 8 8 1 0 2 7 4 44 5 2 6 5输入格式第一行包含整数n,表示数字三角形的层数。接下来n行,每行包含若干整数,其中第 i 行表示数字三角形第 i 层包含的整数。输出格式输出一个整数,表示最大的路径数字和。数据范围1原创 2021-01-11 09:26:56 · 709 阅读 · 0 评论 -
货仓选址
货仓选址在一条数轴上有 N 家商店,它们的坐标分别为 A1~AN。现在需要在数轴上建立一家货仓,每天清晨,从货仓到每家商店都要运送一车商品。为了提高效率,求把货仓建在何处,可以使得货仓到每家商店的距离之和最小。输入格式第一行输入整数N。第二行N个整数A1~AN。输出格式输出一个整数,表示距离之和的最小值。数据范围1≤N≤100000,0≤Ai≤40000输入样例:46 2 9 1输出样例:12第一种:#include <iostream>#includ原创 2021-01-11 08:23:25 · 137 阅读 · 0 评论