- 博客(33)
- 收藏
- 关注
原创 算法练习:831.KMP字符串
831.KMP字符串给定一个模式串S,以及一个模板串P,所有字符串中只包含大小写英文字母以及阿拉伯数字。模板串P在模式串S中多次作为子串出现。求出模板串P在模式串S中所有出现的位置的起始下标。输入格式第一行输入整数N,表示字符串P的长度。第二行输入字符串P。第三行输入整数M,表示字符串S的长度。第四行输入字符串S。输出格式共一行,输出所有出现位置的起始下标(下标从0开始计数),整数之间用空格隔开。数据范围1≤N≤1051≤N≤1051≤M≤1061≤M≤106输入样例:3ab
2020-07-21 18:44:32
146
原创 算法练习:154.滑动窗口
154.滑动窗口给定一个大小为n≤106n≤106的数组。有一个大小为k的滑动窗口,它从数组的最左边移动到最右边。您只能在窗口中看到k个数字。每次滑动窗口向右移动一个位置。以下是一个例子:该数组为[1 3 -1 -3 5 3 6 7],k为3。窗口位置最小值最大值[1 3 -1] -3 5 3 6 7-131 [3 -1 -3] 5 3 6 7-331 3 [-1 -3 5] 3 6 7-351 3 -1 [-3 5 3] 6 7-35
2020-07-21 18:43:05
490
原创 算法练习:830.单调栈
830.单调栈给定一个长度为N的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出-1。输入格式第一行包含整数N,表示数列长度。第二行包含N个整数,表示整数数列。输出格式共一行,包含N个整数,其中第i个数表示第i个数的左边第一个比它小的数,如果不存在则输出-1。数据范围1≤N≤1051≤N≤1051≤数列中元素≤1091≤数列中元素≤109输入样例:53 4 2 7 5输出样例:-1 3 -1 2 2代码 acwing#include<iostream>
2020-07-21 18:41:52
544
原创 算法练习:829.模拟队列
829.模拟队列实现一个队列,队列初始为空,支持四种操作:(1) “push x” – 向队尾插入一个数x;(2) “pop” – 从队头弹出一个数;(3) “empty” – 判断队列是否为空;(4) “query” – 查询队头元素。现在要对队列进行M个操作,其中的每个操作3和操作4都要输出相应的结果。输入格式第一行包含整数M,表示操作次数。接下来M行,每行包含一个操作命令,操作命令为”push x”,”pop”,”empty”,”query”中的一种。输出格式对于每个”empty
2020-07-21 18:40:28
317
原创 算法练习:828.模拟栈
828.模拟栈实现一个栈,栈初始为空,支持四种操作:(1) “push x” – 向栈顶插入一个数x;(2) “pop” – 从栈顶弹出一个数;(3) “empty” – 判断栈是否为空;(4) “query” – 查询栈顶元素。现在要对栈进行M个操作,其中的每个操作3和操作4都要输出相应的结果。输入格式第一行包含整数M,表示操作次数。接下来M行,每行包含一个操作命令,操作命令为”push x”,”pop”,”empty”,”query”中的一种。输出格式对于每个”empty”和”qu
2020-07-21 18:39:16
297
原创 算法练习:827.双链表
827.双链表实现一个双链表,双链表初始为空,支持5种操作:(1) 在最左侧插入一个数;(2) 在最右侧插入一个数;(3) 将第k个插入的数删除;(4) 在第k个插入的数左侧插入一个数;(5) 在第k个插入的数右侧插入一个数现在要对该链表进行M次操作,进行完所有操作后,从左到右输出整个链表。注意:题目中第k个插入的数并不是指当前链表的第k个数。例如操作过程中一共插入了n个数,则按照插入的时间顺序,这n个数依次为:第1个插入的数,第2个插入的数,…第n个插入的数。输入格式第一行包含整数M,
2020-07-21 18:37:13
316
原创 算法练习:826.单链表
826.单链表实现一个单链表,链表初始为空,支持三种操作:(1) 向链表头插入一个数;(2) 删除第k个插入的数后面的数;(3) 在第k个插入的数后插入一个数现在要对该链表进行M次操作,进行完所有操作后,从头到尾输出整个链表。注意:题目中第k个插入的数并不是指当前链表的第k个数。例如操作过程中一共插入了n个数,则按照插入的时间顺序,这n个数依次为:第1个插入的数,第2个插入的数,…第n个插入的数。输入格式第一行包含整数M,表示操作次数。接下来M行,每行包含一个操作命令,操作命令可能为以下几
2020-07-21 18:34:07
116
原创 语法练习:818.数组排序
818.数组排序给定一个长度为n的数组a以及两个整数 l 和 r,请你编写一个函数,void sort(int a[], int l, int r),将a[l] ~ a[r]从小到大排序。输出排好序的数组a。输入格式第一行包含三个整数n,l,r。第二行包含n个整数,表示数组a。输出格式共一行,包含n个整数,表示排序完成后的数组a。数据范围0≤l≤r<n≤10000≤l≤r<n≤1000输入样例:5 2 44 5 1 3 2输出样例:4 5 1 2 3#inclu
2020-07-20 14:11:32
750
原创 语法练习:817.数组去重
817.数组去重给定一个长度为n的数组a,请你编写一个函数:int unique(int a[], int size); //返回数组前size个数中的不同数的个数。输入格式第一行包含两个整数n和size。第二行包含n个整数,表示数组a。输出格式共一行,包含一个整数表示去重完成之后的数组长度。数据范围1≤size≤n≤10001≤size≤n≤1000输入样例:5 31 1 2 4 5输出样例:4#include<iostream>using namesp
2020-07-20 11:32:19
557
原创 语法练习:816.数组翻转
816.数组翻转给定一个长度为n的数组a和一个整数size,请你编写一个函数,void reverse(int a[], int size),实现将数组a中的前size个数翻转。输出翻转后的数组a。输入格式第一行包含两个整数n和size。第二行包含n个整数,表示数组a。输出格式共一行,包含n个整数,表示翻转后的数组a。数据范围1≤size≤n≤10001≤size≤n≤1000输入样例:5 31 2 3 4 5输出样例:3 2 1 4 5#include<iostre
2020-07-20 11:31:44
941
原创 语法练习:815.打印字符串
815.打印字符串给定一个字符串,请你编写一个函数,void print(char str[]), 将这个字符串打印出来。输入格式共一行,包含一个字符串。输出格式共一行,表示打印出的字符串。数据范围1≤字符串长度≤1001≤字符串长度≤100输入样例:I love AcWing.输出样例:I love AcWing.#include<cstdio>void print(char str[]){ printf("%s",str);}int main(
2020-07-20 11:30:56
662
原创 语法练习:814.复制数组
814.复制数组给定两个数组a和b以及一个整数size,请你编写一个函数,void copy(int a[], int b[], int size),将a数组中的前size个数字,复制到b数组中。复制完成后,输出b数组。输入格式第一行包含整数n, m, size,分别表示a数组的长度,b数组的长度以及整数size。第二行包含n个整数,表示数组a。第三行包含m个整数,表示数组b。输出格式共一行,包含m个整数,表示复制完成后的数组b。数据范围1≤n≤m≤1001≤n≤m≤100,1≤siz
2020-07-20 11:30:12
244
原创 语法练习:810.绝对值
810.绝对值输入一个整数x,请你编写一个函数,int abs(int x),输出x的绝对值。输入格式共一行,包含一个整数x。输出格式共一行,包含x的绝对值。数据范围−100≤x≤100−100≤x≤100输入样例:-3输出样例:3#include<iostream>using namespace std;int abs(int x){if(x > 0) return x;else return -x;}int main(){int x;
2020-07-20 11:29:11
133
原创 语法练习:809.最小公倍数
809.最小公倍数输入两个整数a和b,请你编写一个函数,int lcm(int a, int b),计算并输出a和b的最小公倍数。输入格式共一行,包含两个整数a和b。输出格式共一行,包含一个整数,表示a和b的最小公倍数。数据范围1≤a,b≤10001≤a,b≤1000输入样例:6 8输出样例:24#include<iostream>using namespace std;int lcm(int a,int b){ for(int i = 1;i &
2020-07-20 11:28:29
294
原创 语法练习:807.区间求和
807.区间求和输入两个整数 l 和 r,请你编写一个函数,int sum(int l, int r),计算并输出区间[l, r]内所有整数的和。输入格式共一行,包含两个整数 l 和 r。输出格式共一行,包含一个整数,表示所求的和。数据范围1≤l≤r≤10001≤l≤r≤1000输入样例:3 5输出样例:12#include<iostream>using namespace std;int sum(int l,int r){ int s = 0;
2020-07-20 11:27:28
245
原创 语法练习:806.两个数的和
806.两个数的和输入两个浮点数x和y,请你编写一个函数,double add(double x, double y),计算并输出x与y的和。输入格式共一行,包含两个浮点数x和y。输出格式共一行,包含一个浮点数,表示两个数的和,结果保留2位小数。数据范围−1000≤x,y≤1000−1000≤x,y≤1000输入样例:1.11 2.22输出样例:3.33#include<iostream>using namespace std;double add(doubl
2020-07-20 11:26:22
362
原创 算法练习:803.区间合并
803.区间合并给定 nn个区间[li,ri],要求合并所有有交集的区间。注意如果在端点处相交,也算有交集。输出合并完成后的区间个数。例如:[1,3]和[2,6]可以合并为一个区间[1,6]。输入格式第一行包含整数n。接下来n行,每行包含两个整数 l 和 r。输出格式共一行,包含一个整数,表示合并区间完成后的区间个数。数据范围1≤n≤1000001≤n≤100000,−109≤li≤ri≤109−109≤li≤ri≤109输入样例:(代码 AcWing yxc)51 22
2020-07-16 10:20:09
291
原创 算法练习:801.二进制中1的个数
801.二进制中1的个数给定一个长度为n的数列,请你求出数列中每个数的二进制表示中1的个数。输入格式第一行包含整数n。第二行包含n个整数,表示整个数列。输出格式共一行,包含n个整数,其中的第 i 个数表示数列中的第 i 个数的二进制表示中1的个数。数据范围1≤n≤1000001≤n≤100000,0≤数列中元素的值≤1090≤数列中元素的值≤109输入样例:51 2 3 4 5输出样例:1 1 2 1 2使用lowbit的操作,先将数字最后一个一截取出来,然后不断减去得到的
2020-07-16 09:38:17
262
原创 算法练习:802.区间和
802.区间和给定一个长度为n的数列,请你求出数列中每个数的二进制表示中1的个数。输入格式第一行包含整数n。第二行包含n个整数,表示整个数列。输出格式共一行,包含n个整数,其中的第 i 个数表示数列中的第 i 个数的二进制表示中1的个数。数据范围1≤n≤1000001≤n≤100000,0≤数列中元素的值≤1090≤数列中元素的值≤109输入样例:51 2 3 4 5(代码来源 AcWing yxc)输出样例:1 1 2 1 2#include<iostream&
2020-07-15 12:26:02
236
原创 算法练习:798.差分矩阵
798.差分矩阵输入一个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 个整数,表示所有操作进行完毕后
2020-07-13 19:19:13
305
原创 算法练习:797.差分
797.差分输入一个长度为n的整数序列。接下来输入m个操作,每个操作包含三个整数l, r, c,表示将序列中[l, r]之间的每个数加上c。请你输出进行完所有操作后的序列。输入格式第一行包含两个整数n和m。第二行包含n个整数,表示整数序列。接下来m行,每行包含三个整数l,r,c,表示一个操作。输出格式共一行,包含n个整数,表示最终序列。数据范围1≤n,m≤1000001≤n,m≤100000,1≤l≤r≤n1≤l≤r≤n,−1000≤c≤1000−1000≤c≤1000,−100
2020-07-13 19:18:00
196
原创 算法练习:796.子矩阵的和
796.子矩阵的和输入一个n行m列的整数矩阵,再输入q个询问,每个询问包含四个整数x1, y1, x2, y2,表示一个子矩阵的左上角坐标和右下角坐标。对于每个询问输出子矩阵中所有数的和。输入格式第一行包含三个整数n,m,q。接下来n行,每行包含m个整数,表示整数矩阵。接下来q行,每行包含四个整数x1, y1, x2, y2,表示一组询问。输出格式共q行,每行输出一个询问的结果。数据范围1≤n,m≤10001≤n,m≤1000,1≤q≤2000001≤q≤200000,1≤x1≤x2
2020-07-13 11:55:20
197
1
原创 算法练习:795.前缀和
795.前缀和输入一个长度为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 32 4输出样例:3610
2020-07-13 10:39:05
286
原创 算法练习:794.高精度除法
794.高精度除法给定两个正整数A和B;请你计算A /B的值。输入格式共两行,第一行包含整数A,第二行包含整数B。输出格式共一行,包含A /B的值。数据范围1≤A的长度≤10000001 \le A的长度\le 10000001≤A的长度≤1000000,1≤B≤100001 \le B \le 100001≤B≤10000输入样例:63输出样例:2(注:代码来源于AcWing中博客yxc)#include<algorithm>#include<vector&
2020-07-09 09:19:03
204
原创 算法练习:793.高精度乘法
793.高精度乘法给定两个正整数A和B;请你计算A * B的值。输入格式共两行,第一行包含整数A,第二行包含整数B。输出格式共一行,包含A * B的值。数据范围1≤A的长度≤10000001 \le A的长度\le 10000001≤A的长度≤1000000,1≤B≤100001 \le B \le 100001≤B≤10000输入样例:23输出样例:6(注:代码来源于AcWing中博客yxc)#include<iostream>using namespace s
2020-07-08 23:29:35
146
原创 算法练习:792.高精度减法
792.高精度减法给定两个正整数,计算它们的差。输入格式共两行,每行包含一个整数。输出格式共一行,包含所求的和。数据范围1≤整数长度≤10000001 \le整数长度\le 10000001≤整数长度≤1000000输入样例:10000011输出样例:99989(注:代码来源于AcWing中博客yxc)#include<iostream>using namespace std;//判断是否有A >= Bbool cmp(vector<int>
2020-07-08 23:22:32
201
原创 算法练习:791.高精度加法
791.高精度加法给定两个正整数,计算它们的和。输入格式共两行,每行包含一个整数。输出格式共- -行,包含所求的和。数据范围1≤整数长度≤10000001 \le整数长度\le 10000001≤整数长度≤1000000输入样例:1223输出样例:35(注:代码来源于AcWing中博客yxc)#include<iostream>#include<vector>using namespace std;const int N = 1e6 + 10;
2020-07-08 22:28:28
164
原创 算法练习:790.数的三次方根
790.数的三次方根给定一个浮点数n,求它的三次方根。输入格式共一行,包含一个浮点数n。输出格式共一行,包含一个浮点数,表示问题的解。注意,结果保留6位小数。数据范围-10000<= n <= 10000输入样例:1000. 00输出样例:10.000000(注:代码来源于AcWing中博客yxc)#include<iostream>using namespace std;int main(){double x;cin >> x;
2020-07-08 21:48:01
260
原创 算法练习:789.数的范围
789.数的范围给定一个按照升序排列的长度为n的整数数组,以及q个查询。对于每个查询,返回-个元素k的起始位置和终止位置(位置从0开始计数)。如果数组中不存在该元素,则返回"-1 -1"。输入格式第一行包含整数n和q,表示数组长度和询问个数。第二行包含n个整数(均在1-10000范围内) ,表示完整数组。接下来q行,每行包含-个整数k, 表示一个询问元素。输出格式共q行,每行包含两个整数,表示所求元素的起始位置和终止位置。如果数组中不存在该元素,则返回"-1 -1"。数据范围1≤n≤10
2020-07-08 21:37:13
169
原创 算法练习:788.逆序对的数量
788.逆序对的数量给定一个长度为n的整数数列,请你计算数列中的逆序对的数量。逆序对的定义如下:对于数列的第i个和第j个元素,如果满足i<j且a[i]> a[j],则其为-一个逆序对;否则不是。输入格式第一行包含整数n,表示数列的长度。第二行包含n个整数,表示整个数列。输出格式输出一个整数,表示逆序对的个数。数据范围1<=n<=100000输入样例:6234561输出样例:5#include<iostream>using namespac
2020-07-08 20:56:29
189
原创 算法练习:787.归并排序
787.归并排序给定你一个长度为n的整数数列。请你使用归并排序对这个数列按照从小到大进行排序。并将排好序的数列按顺序输出。输入格式输入共两行,第- -行包含整数n。第二行包含n个整数(所有整数均在1~10910^9109范围内),表示整个数列。输出格式输出共一行,包含n个整数,表示排好序的数列。数据范围1≤n≤10000001 \le n \le 10000001≤n≤1000000输入样例:531245(注:代码来源于AcWing中博客yxc)#include<iostr
2020-07-08 20:54:18
279
原创 算法练习:786.第K个数
786.第k个数给定一一个长度为n的整数数列,以及一个整数k,请用快速选择算法求出数列的第k小的数是多少。输入格式第一行包含两个整数n和k。第二行包含n个整数(所有整数均在1~10910^9109范围内) , 示整数数列。输出格式输出个整数,表示数列的第k小数。数据范围1≤n≤100001 \le n \le 100001≤n≤100001≤k≤n1 \le k \le n1≤k≤n输入样例:5324153输出样例:3(注:代码来源于AcWing中博客yxc)#include&
2020-07-08 20:51:08
178
原创 算法练习:785.快排
785.快速排序给定你一个长度为n的整数数列。请你使用快速排序对这个数列按照从小到大进行排序。并将排好序的数列按顺序输出。输入格式输入共两行,第- -行包含整数n。第二行包含n个整数(所有整数均在1-10范围内),表示整个数列。输出格式输出共一行, 包含n个整数,表示排好序的数列。数据范围1 < n≤1000000输入样例: .531245(注:代码来源于AcWing中yxc博客)#include<iostream>using namespace std;
2020-07-08 20:48:18
85
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人