自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 收藏
  • 关注

原创 学习记录

学习记录

2022-09-06 01:10:06 149 1

原创 946. 验证栈序列

[946. 验证栈序列](https://leetcode.cn/problems/validate-stack-sequences/)

2022-08-31 23:50:16 179

原创 链表内指定区间反转

链表内指定区间反转

2022-08-31 23:39:57 1299

原创 二叉搜索树的实现

主要实现了二叉搜索树的插入,查找,删除(重点,难点),前序遍历,中序遍历,后序遍历#include<cstdio>#include<iostream>using namespace std;struct BSTNode{ int val; BSTNode *left; BSTNode *right; BSTNode(int _val = 0, BSTNode *_left = nullptr, BSTNode *_right = nullptr

2021-10-27 16:59:57 141

原创 快速排序 以及数组第k大的应用

时间复杂度为:平均为nlog(n),最坏为n²,但很难达到最坏情况空间复杂度为:O(1),不需要辅助数组,归并排序需要一个O(n)的辅助数组快速排序第一种写法:#include<bits/stdc++.h>using namespace std;int n, a[100005];void quickSort(int *a, int l, int r){ if(l >= r) return ; int mid = a[(l+r)/2]; i

2021-10-17 11:17:58 109

原创 C++ 智能指针 atuo_ptr,unique_ptr,shared_ptr,weak_ptr

#include <bits/stdc++.h>#include <memory>//智能指针头文件using namespace std;int main(){ /* 1.auto_ptr 已经被C++11废弃了,所有权模式, 当两个auto_ptr 指针指向同一个地址时, 当一个指针释放内存时, 另外一个指针还是指向这个地址, 并且可以这个指针访问,但是会导致程序崩溃 auto_ptr建议改用uniqu_ptr

2021-10-16 19:06:55 129

原创 Linux 常用指令

显示主机名称:hostname更改主机名称:hostnamectl set-hostname (新名称)

2021-10-01 15:07:56 111

原创 vector中的size和capacity区别,以及resize和reserve的使用

系统是CentOS 7说明都在代码中的注释里//// Created by Aaj on 2021/9/11.//#include <bits/stdc++.h>using namespace std;int main(){ //size是当前vector中的元素个数,capacity是vector当前可容纳的元素个数 //当使用push_back等操作使得size超过capacity后,capacity会翻倍 //resize会更改size大小,若siz

2021-09-11 17:46:20 437

原创 protobuf学习笔记

protobuf官方网址:https://developers.google.com/protocol-buffersgithub源码:https://github.com/protocolbuffers/protobuf1. protobuf是什么“Protocol buffers are Google’s language-neutral, platform-neutral, extensible mechanism for serializing structured data – think

2021-08-10 20:43:10 2453

原创 使用socket和TCP网络协议实现的客户端和服务端示例,采用谷歌的protobuf数据传输协议(类似json),部署在Linux上

github上项目源码链接:https://github.com/SuperApeA/protobuf-demo运行环境:CentOS7,C++11,cmake3,protobuf3项目目录结构:protobuf传输协议文件:写完”.proto"文件之后,通过proto的命令在cmd或者Linux中生成相应的”.pb.cc“和“.pb.h”文件,首先进入到proto文件同级目录下,如何输入以下命令,记得先安装proto3protoc --cpp_out=. ./Cartoon.protos

2021-08-10 14:57:02 566 2

原创 二进制枚举的两种写法

二进制枚举,就是说对于一个上限二进制数(一般来说每位都为1),枚举他所有小于等于它的所有二进制数,也可以用来表示这个二进制数的所有子集,可以用来枚举一个数列的所有可能子集,ACM的常用枚举技巧之一。下面是具体代码:#include<bits/stdc++.h>using namespace std;int main(){ int num=8;//表示枚举的位置个数 //写法1: for(int i=0;i<(1<<num)-1;++i){//i为

2021-05-08 17:25:34 773

原创 leetcode力扣221. 最大正方形(动态规划dp)

题目传送门题意:在一个由 ‘0’ 和 ‘1’ 组成的二维矩阵(n*m)内,找到只包含 ‘1’ 的最大正方形,并返回其面积。题解:主要思路就是正方形的对角线,比如现在已经有一个正方形的区域,那么在该正方形的基础上要使得边长再+1,那么就需要最右边增加一列和最下面再增加一排(对于(i,j)我们i从0到n枚举,j从0,m枚举),也就是说对于(i,j)为右下角的正方形而言,在(i-1,j-1)的基础之上只需在考虑一下i这一行,以及j这一列连续的‘1’是否比(i-1,j-1)的正方形边长更大就行。动态数组为d

2021-03-17 20:57:37 330

原创 Codeforces Round #705 (Div. 2) 1493D. GCD of an Array题解

D. GCD of an ArrayD题传送门题意:给我们n(小于等于2e5)个数的数组a,然后接着又q(小于等于2e5)次操作,每次操作是将a[i]乘上x(小于等于2e5),要我们求出a[1]到a[n]的最大公因数(gcd)。题解:数据结构+数论+算贡献首先,对于每次操作的结果,必然会使得新的gcd大于等于原先的gcd,这里请思考一分钟。因为对于一个gcd而言,是所有a[i]都存在的因子相乘得到的,那么可能有些a[i]的因子比其他a[i]的因子数目多,比如现在数组a为:6,8,12,当前

2021-03-16 14:38:51 220

原创 Codeforces Round #705 (Div. 2) 1493C. K-beautiful Strings题解

C. K-beautiful Stringsc题传送门题意:题意比较简单,给我们一个由小写字母组成的字符串S,长度为n(n<=1e5),然后给我们一个k(k<=n),要我们找出比字典序尽可能小但不小于 S 的字符串,这个字符串还需满足每种字母出现的个数都是k的倍数。题解:贪心+构造+前缀和+枚举1.首先判断n%k=0是否成立,若不成立,则一定构不成满足题意的字符串。因为若n%k>0,那么就说明存在某种字母的个数就不是k的倍数。2.在n%k==0的前提下,在判断原字符串S是

2021-03-16 14:38:08 179

原创 Codeforces Round #705 (Div. 2) 1493B. Planet Lapituletti题解

B. Planet LapitulettiB题传送门题意:某个星球上的时间和我们地球类似,但是每天有h个小时,每小时有m分钟(1<=h,m<=100)。当前时间为HH:MM,这时候有一面镜子,问从HH:MM开始往后,当镜子里的时间合理时,即镜子里的时间满足0<=H<h && 0<=M<m时,真实时间是多少,以HH:MM格式输出。题解:枚举首先我们需要知道有哪些数字映射到镜子里之后是合理的数字,根据题目描述,可以知道有,0,1,2,5,

2021-03-16 14:37:34 201

原创 Codeforces Round #705 (Div. 2) 1493A. Anti-knapsack题解

A. Anti-knapsackA题传送门题意:给我们一个n,一个k(n,k<=1000),需要我们得到一个集合,集合的元素全部小于n,并且任意子集相加不等于k,而且这个集合元素相加尽可能大。题解:贪心。1.若k<n,则{x|k<x<=n,x∈Z} 都满足2.考虑小于k的那些元素中,我们希望取到最多的元素,那么只能取一半,并且是最大的那一半,例如k=7时,那么可以取4,5,6;如果k=8,那么可以取4,5,6,7代码如下:#include<bits/st

2021-03-16 14:36:47 219

原创 Codeforces Round #707 Div2 1501C. Going Home

题意:给我们一个长度为n(4<=n<=2e5)的数组a(0<=a[i]<=2.5e6),然后需要我们判断是否存在四个下标x,y,z,w,使得a[x]+a[y]=a[z]+a[w],存在则输出yes,否则no.题解:简单数论其实这题就是两个for循环就可解决,看似n的数据范围为2e5,两个for循环一般来说肯定是超时的,然而,注意看a[i]的数据范围,只有2.5e6,那么对于2e5个数而言,当n的数据量比较大的时候,例如接近2e5时,那么在考虑a[i]的范围,这个时候就必然会出

2021-03-15 10:39:59 146

原创 筛素数:埃氏筛,线性筛(欧拉筛)

最快在O(n)复杂度筛出n以内的所有素数

2021-03-13 21:09:37 272

原创 Codeforces Round #705 (Div. 2) 1493题解AB/C. K-beautiful Strings/D. GCD of an Array/E. Enormous XOR

Codeforces Round #705 (Div. 2) 1493题解A. Anti-knapsackA题传送门题意:给我们一个n,一个k(n,k<=1000),需要我们得到一个集合,集合的元素全部小于n,并且任意子集相加不等于k,而且这个集合元素相加尽可能大。题解:贪心。1.若k<n,则{x|k<x<=n,x∈Z} 都满足2.考虑小于k的那些元素中,我们希望取到最多的元素,那么只能取一半,并且是最大的那一半,例如k=7时,那么可以取4,5,6;如果k=8,那

2021-03-07 23:14:48 577

原创 牛客 题目ID13228 倒水 题解 贪心思想

题解:       这题最开始是朝着二分的方向去想的,对温度进行二分求解答案,但想了好久,感觉二分的check函数不好写,而且感觉精度也可能会有比较大的丢失。       正解是贪心思想,先将n杯水的最大温度maxT和最小温度minT先存起来,将水缸和n杯水杯里的水全部混在一起,会得到一个混合后的温度endT,将这个温度和之前得到最大温度以及最小温度进行比较,这里.

2021-02-05 00:16:59 317

原创 C++ 浮点数类型的输入与输入格式

**C++ 浮点数类型的输入与输入格式**输入:float、double类型输入:%f或cinlong double类型输入:%Lf输出:float类型输出:%f或coutdouble类型输出:%Lflong double类型输出:%Lf

2021-01-20 11:40:25 7347

原创 ACM 基本排序算法,归并排序(求逆序对)

归并排序主要运用到的的思想:分治、递归功能:1.数组进行排序。   2.计算数组中的逆序对的个数。时间复杂度:稳定的O(nlogn)空间复杂度:O(n)附上模板代码:#include<bits/stdc++.h>using namespace std;long long Merge(int a[],int b[],int s,int m,int e){ int i=s,j=m+1,k=s; long long ans=0; while(i<=m &

2020-09-29 12:26:55 317

原创 C++ STL is_sorted() 判断排好序

C++ STL is_sorted() 判断排好序用法:头文件algorithm使用方法同 sort()返回值 为bool,已经排好了则返回true,否则false

2020-06-08 20:24:39 898

原创 c++ STL 随机打乱数组 random_shuffle()

c++ STL 随机打乱数组 random_shuffle()使用方法:头文件:algorithm使用:要打乱的数组(容器)的起始地址和结束地址:random_shuffle( begin , end)复杂度:O(n)将数组元素打乱,但每次都是同一种打乱顺序(伪打乱),若要每次都打乱的不同则需更改随机种子,看代码:#include<algorithm>#include<cstdio>#include<ctime>using namespace std

2020-05-26 21:47:13 15607 3

原创 c++ STL 区间第k大 nth_element()

c++ STL 区间第k大 nth_element()使用方法:头文件:algorithm使用:三个参数,数组(容器)要操作区间的起始地址、第k个、数组(容器)要操作区间的结束地址nth_element( begin , begin + (k-1) , end) (起始为0,所以为k-1)在使用该函数后,数组(容器)操作区间的第 k个元素则为第k大的元素,两边元素的顺序可能会不同,但它左边的元素都比它大,而右边的元素都比它小#include<algorithm>#include

2020-05-26 20:58:58 1428

原创 c++ STL partial_sort() 部分排序

STL partial_sort() 部分排序使用背景:对于一个长度较大的数组,如果我们要想知道该数组的前m个小的元素是什么,我们可以对整个数数进行排序,然后取前m个,例如在长度为10w的数组中,找出前50个小的数,这样就比较费时,显得杀鸡用牛刀这时我们可以使用STL 中的 partial_sort()函数 解决这个问题使用方法:头文件,algorithm使用方法:在数组(容器)的 指定区间 begin位置 ~end位置(操作区间),找出前m个小的数 :** partial_sort ( be

2020-05-26 17:37:48 1278

原创 ACM ios::sync_with_stdio(false)和scanf

为了使cin和cout在读入的时候会更快,可以加上这个ios::sync_with_stdio(false),不过加上之后就不要cin和scanf混用了,否则在容易在oj上wa,可能会造成scanf无法读取的问题。写题的时候,对于同样的样例输入,本地可以正确出结果,但是在oj上就无法正确读取了。...

2020-03-22 22:50:58 258

原创 c++ STL全排列:next_permutation()函数

关于next_permutation(being,end)在写洛谷题时,使用到的一个库函数,在求全排列的时候可以用到用处:对于一个数组,求此比目前数组字典序更大的下一个全排列参数用法和sort相似,两个参数分别为数组开始和结束位置附上练习:P1706 全排列问题P1088 火星人#include<bits/stdc++.h>using namespace std;in...

2020-03-15 18:38:07 165

原创 I 签到题 摸底测试

I 签到题摸底测试I题题意:如果从左往右和从右往左看是一样的,那么就是回文字符串。现在给你一个长度为n(1≤n≤10e5)字符串,你可以改变字符,但改变字符有如下的规则(按从下标0开始计算):1 将ai变成an−i−12 将an−i−1变成ai现在要你将给定的这个字符串变成回文字符串,并且字典序最小。题解:其实从前只要线性的比较一下前数的的某个和从后面数相同位置的字母的大小,然后都...

2019-11-30 16:44:15 192

原创 H: 地图 摸底测试

H: 地图摸底测试H题题意:两个大小相同的图,图上都有若干障碍,问是否存在一条一样的最短路径从左上角到右下角。题解:一道bfs的题,跑三次bfs,两个图分别跑一次,然后将两个图合起来,将它们的障碍点合起来,然后再跑一遍bfs,若三次均可以到达终点并且路径长度相同,即存在一条相同的最短路径。#include<bits/stdc++.h>using namespace std...

2019-11-30 15:54:49 212

原创 G: 聚会 摸底测试

G: 聚会摸底测试G题题意:有n个人,现在有一个聚会,每个人都可以选择参加或者不参加。而参加的人中每个人要么只去送礼物,要么只接受礼物。不存在全部都接受礼物或者全部都送礼物的情况(这样要么没人送礼物,要么没人接受礼物了)。问有多少中情况?题解:对于1个人和2个人先特判一下风别为1和3。其实就是求组合数,对于n>=3时,每次去的人数必定要>=2,并且每个人有送和不送两两种情况...

2019-11-30 15:47:30 302

原创 F: 操作数 摸底测试

F: 操作数摸底测试F题题意:有n个数初始时都是0,m次操作,共有两种操作,1.输入L和R将[L,R]区间内的数反转,将1变成0,0变成12.输入X,查询第x个数是0还是1题解:一道线段树的题,根据题意,因为每个数初始化为0,所以可以不用建树这个操作,只需要一个懒惰标记数组就可以了,对于每次反转,只需将这个区间标记一次,然后对于每次查询,只需判断每个数被标记过几次,当被标记的此时为...

2019-11-30 15:10:06 190

原创 E: Number 摸底测试

E: Number摸底测试E题题意:给一个整数n(5<=n<=59),求1/n mod x,其中x为将n分解若干个正整数然后使得乘积最大的那个积。题解:求n逆元!首先要将x给算出来,有两种方法:1.直接套公式:当n=3k,k>1的时候,最大的积是3^k当n=3k+1,k>1的时候,最大的积是3^(k-1)4当n=3k+2,k>1的时候,最大的积是...

2019-11-30 14:44:21 174

原创 C: connnect 摸底测试

C: connnect摸底测试c题题意:给n个点,并且每个点有三个值,x,y,z,连接两点u,v之间的花费为MIN(|Xu−Xv|,|Yu−Yv|,|Zu−Zv|) ,求将n个点连起来的最小花费为多少。题解:其实就是一道最小生成树的题,用kluscal算法来做,和普通的最小生成树的差别在于任意两点之间有三个距离值,在用kluscal之前要先处理一下两点之间的距离。首先想想kluscal...

2019-11-30 14:11:25 242

原创 B.Prime Split 摸底测试

B.Prime Split摸底测试B题题意:给一个整数n(1<=n<=4*10e4),将其分解成三个质数之和(算组合),问有多少种分法。题解:首先打表,将4*10e4内的所有质数从小到大预处理出来存在一个数组中,然后,对于每个n,先用两个for在小于n的所有质数中遍历第一个和第二个可能的质数,并且第二个不小于第一个,然后再用n减去第一个第二个可以得到第三个,并且第三个要满足不...

2019-11-30 13:54:14 212

原创 江理oj 摸底测试

A.water摸底测试A题题目大意:有n个杯子,并告诉每个杯子可以容纳的水量,之后有m次注水操作,对于每次注水操作告诉注水的杯子序号冰并且水量,当当前杯子满了之后并且还有水剩余的时候朝下一序号的杯子注水,直到没有水了,或者到了最后一个序号的杯子。题解:首先开个数组存下n个杯子的容量,再开一个数组,对于每次注水操作,将杯子序号为下标,存下每次的注水量,然后线性从第一个杯子开始,若要注水就判...

2019-11-30 13:39:21 407

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除