- 博客(89)
- 收藏
- 关注
原创 【题解】费解的开关
文章目录题干参考代码题干你玩过“拉灯”游戏吗?25 盏灯排成一个 5×5 的方形。每一个灯都有一个开关,游戏者可以改变它的状态。每一步,游戏者可以改变某一个灯的状态。游戏者改变一个灯的状态会产生连锁反应:和这个灯上下左右相邻的灯也要相应地改变其状态。我们用数字 1 表示一盏开着的灯,用数字 0 表示关着的灯。下面这种状态1011101101101111000011011在改变了最左上角的灯的状态后将变成:0111111101101111000011011再改变它正中间
2022-03-31 23:06:20
336
19
原创 【蓝桥真题/C++ B组】带分数
题目来自: **第四届蓝桥杯省赛C++B组 **#include <iostream>#include <cstring>#include <algorithm>const int N = 20;int n;int cnt; bool book[N] , re[N];using namespace std;bool check(int a, int c ){ long long b = n * c - a * c; if
2022-03-20 11:54:55
1583
28
原创 【算法常用STL】-> priority_queue
优先队列 Heappriority_queue<int, vector<int>, less<int>>s;//less表示按照递减(从大到小)的顺序插入元素priority_queue<int, vector<int>, greater<int>>s;//greater表示按照递增(从小到大)的顺序插入元素不写第三个参数或者写成less都是大根堆。greater是小根堆。在C++中优先队列默认的是大根堆,如果用小根堆则加入
2022-03-11 16:35:54
8078
10
原创 Codeforces Round #776 (Div. 3) A+B+C
文章目录A. Deletions of Two Adjacent Letters题干思路参考代码B. DIV + MOD(数学 + 构造)题干思路参考代码A. Deletions of Two Adjacent Letters题干给定字符串 s,字符串长度为奇数。 该字符串由拉丁字母的小写字母组成。只要字符串长度大于1,就可以对其进行如下操作:选择字符串s中任意两个相邻的字母,从字符串中删除。例如,从字符串“lemma”在一次操作中,您可以得到以下四个字符串中的任何一个:“mma”、“lma”、
2022-03-09 21:10:20
433
10
原创 【C++】 <atoi><stoi><to_string> 转换类函数 《解析 + 例题》
文章目录1. stoi()作用返回值2. atoi()作用返回值3. to_string作用返回值1. stoi()stoi()的参数是const string作用将字符串转换为整数解析 传入的字符串(string)将其内容解析为指定基数的整数,该基数作为 int 值返回。返回值成功时,函数将转换后的整数作为 int 值返回。Ps:如果 str 中的第一个非空白字符序列不是有效整数,或者由于 str 为空或仅包含空白字符而不存在此类序列,则不执行转换并返回零。2. atoi(
2022-03-07 22:17:29
984
18
原创 蓝桥杯必看 【手撕模板】三分钟搞懂 <堆排序>
文章目录实现堆(数组)例题1. 递归法1为根节点0 为根节点2. 迭代法1为根节点0为根节点堆是一个满二叉树,根据其性质我们就可以知道堆是连续存储的(在数组中),但是日常做算法题的时候自己写链式存储是比较麻烦的,所以最近重点学习一下数组实现堆实现堆(数组)例题输入一个长度为 n 的整数数列,从小到大输出前 m 小的数。输入格式第一行包含整数 n 和 m。第二行包含 n 个整数,表示整数数列。输出格式共一行,包含 m 个整数,表示整数数列中前 m 小的数。数据范围1≤m≤n≤105,1
2022-03-05 14:16:47
933
8
原创 蓝桥杯必看 【手撕模板】三分钟搞懂 <Trie树(字典树)>
#include<iostream>const int N = 1e6 + 10;using namespace std;int son[N][26],book[N],cur;(1)int n ;char str[N],ch;void insert(char str[]){ int p = 0;(2) for(int i = 0 ; str[i] ;i ++)//遍历整个数组 { int u = str[i] - 'a';(3) .
2022-02-20 23:48:41
8037
4
原创 蓝桥杯必看 【手撕模板】三分钟搞懂 <KMP算法>
前言在学习kmp算法之前 我们需要知道 kmp 算法是用来干什么用的KMP算法是一种字符串匹配算法,可以在 O(n+m)的时间复杂度内实现两个字符串的匹配。所谓字符串匹配,是这样一种问题:“字符串 P 是否为字符串 S 的子串?如果是,它出现在 S 的哪些位置?” 其中 S 称为主串;P称为模式串。#include<iostream>const int N = 1000010;using namespace std;int m,n;char s[N],p[N];i
2022-02-19 22:38:18
767
8
原创 【STL】重载函数(ing)
文章目录1. 结构体重载在日常排序中 我们通常需要写 cmp + sort 来进行对结构体 等的排序但是如果使用< >重载 也可以达到同样的效果1. 结构体重载struct three{ int x; double y; string z; //重载 < 号 main 中可以直接调用sort函数进行排序 bool operator < (const three & t) const { re
2022-02-16 10:50:12
626
2
原创 蓝桥杯必看 【手撕模板】三分钟搞懂 <数字排序问题 + STL>
例题一、排列方法一、(常规)暴力搜索利用 递归搜索树 求解#include<iostream>using namespace std;const int N = 10;int n ;bool st[N]={0};//储存状态int nums[N]={0};//储存数据void dfs(int cnt){ if(cnt > n) { for(int i = 1 ;i <= n; i ++ ) cout <&l
2022-02-15 23:04:47
1641
6
原创 【STL】next_permutation(解决组合数/排列)
1. 定义返回值= next_permutation(begin,end)2. 功能按照字典序 求 123 的 下一个排列 1 3 23. 返回值如果已经是最大序列 就返回 false如果不是最大序列 返回 true
2022-02-15 22:49:48
320
原创 【算法常用STL】-> set
1. setset<set>主要包括set(元素不能重复)和multiset(可以包含若干个相等的元素),分别叫做 “有序集合”和“有序多重集合”。set 和 multiset 的内部实现是一棵红黑树,它们支持的函数基本相同。set<int> s;struct rec{…}; set<rec> s; // 结构体rec中必须重载定义小于号multiset<double> s;Ps: 结构体rec中必须重载定义小于号2. 遍历set 的方式
2022-02-15 21:54:13
558
9
原创 【算法常用STL】 ->map
文章目录1. map的声明2. []操作符3. map.find()4. insert() / erase ()5. size() / empty() / clear() / begin() / end()1. map的声明map 是一个由 key val 构成的二元组map<key_type, value_type> name//例如:map<long, long, bool> vis;map<string, int> hash;map<pai
2022-02-14 22:17:28
469
原创 【算法常用STL】vector
文章目录1. vector的定义2. begin() 和 end()3. front 和 back4. 如何遍历vector ?5. push_back()和pop_back()6.empty() 和 size()1. vector的定义vector是一种变长数组*(扩容时倍增),支持随机访问,不支持在任意位置 O(1)。为了保证效率,元素的增删一般应该在末尾进行。#include<vector>#include <vector> // 头文件vector<int
2022-02-14 00:14:50
285
7
原创 【算法常用STL】 pair
1. pair1.1 声明pair 是一个二元组(可以是任意类型)pair<int,string> a;a = {180,"GuLeng"};a.make_pair= {180,"GuLeng"};//C++99 版本需要使用这个1.2 表示形式pair中运用x.first 、x.second等表示二元组中的元素pair<int,string> a;二元组的对应关系分别是int -> a.firststring -> a.second1.
2022-02-13 23:40:54
226
原创 【算法常用STL】bitset()
基本用法#include<bitset>bitset<100>a,b;//100表示二进制串的长度a[0]=1;a[1]= 1;a.set()/a.reset()a.count()a.
2022-02-13 22:47:00
253
原创 【浅谈数据结构】二叉树的遍历
文章目录二叉树的遍历例题1. 前序遍历及源码二叉树的遍历遍历是我们学习二叉树中比较重要的一环,也是我们在二叉树上进行其他操作的基础按照规则,二叉树的遍历有:前序/中序/后序的递归结构遍历:前序遍历(Preorder)——访问根结点的操作发生在遍历其左右子树之前。可以理解为 前序遍历的遍历顺序是 :根-> 左 -> 右(以此类推)中序遍历(Inorder )——访问根结点的操作发生在遍历其左右子树之间遍历顺序是:左-> 根 -> 右后序遍历(Postorder
2022-02-10 21:35:41
878
9
原创 【浅谈数据结构】堆(满二叉树)基本概念及函数实现(附源码)
文章目录1. 堆的概念1.1 定义1.2 特性1.3 堆的种类1.4 常用场景2.堆函数 源码实现1. HeapInit2. HeapDestroy3. HeapPush4. HeapPop5. HeapEmpty6.AdjustUp7. AdjustDown8. HeapSize9. HeapTop10. HeapPrint实现细节1. 堆的概念1.1 定义如果有一个关键码的集合K = {k0,k1, k2,…,kn-1},把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中,并满足:Ki
2022-02-06 20:37:57
798
14
原创 【浅谈数据结构】树、二叉树基本概念
文章目录初识二叉树1)树的概念及结构1.1 树的定义1.2 树的相关概念1.3 树的表示(左孩子右兄弟表示法)2)二叉树概念及结构2.1 概念:度最大为二的树2.2 二叉树的不同状态2.3 满二叉树2.4 完全二叉树2.5 二叉树的性质初识二叉树1)树的概念及结构定义: 任何一棵树都会被分为 根和子树(或者是空树)Ps:树型结构中,子集之间不可以有任何交集 , 否则就不是树形结构1.1 树的定义(图来源于百度百科树(数据结构名词)_百度百科 (baidu.com))1.2 树的相关概
2022-02-04 11:45:00
631
2
原创 【浅谈数据结构】队列的基本函数与操作
文章目录1、定义及基本运算定义:说明:注意:2、队列的基本运算(0)、队列的定义(1)、QueueInit(Q)(2)、QueueEmpty(Q)(3)、 QueueFull(Q)(4)、EnQueue(Q,x)(5)、 DeQueue(Q)(6)、QueueFront(Q)一、顺序队列(1)、顺序队列的定义(2)、 顺序队列的表示(3)、 顺序队列的基本操作注意:二、循环队列1、定义及基本运算定义:队列(Queue)是只允许在一端进行插入,而在另一端进行删除的运算受限的线性表说明: (1)、允
2022-01-28 19:46:54
2252
13
原创 【浅谈数据结构】栈的基本函数与操作
文章目录栈1.栈的定义2.栈的实现方式2.1线性栈 vs 链表栈 的优缺点2. 顺序栈栈(线性栈)2.1子函数含义 以及 实现1. 线性栈的结构类型2. InitStack3. StackEmpty4. StackFull5. Push6. StackPop7. StackTop8. StackDestroy2、顺序栈的基本操作栈栈是一种特殊的线性表,它们的逻辑结构和线性表相同,但是运算规则相比线性表有更多的限制,故又称它们为 运算受限 的线性表。1.栈的定义栈(Stack)是只能在一段(栈
2022-01-24 22:18:30
2930
14
原创 蓝桥杯必看 【手撕模板】三分钟带你上手算法模板(例题 + 套路总结) --> 差分
前言(必看)本系列 暂无详细的 公式推导以及证明,适合有一定知识基础的同学目的是 通过分析例题、了解、总结套路来达到举一反三 触类旁通的效果文章目录前言(必看)1、差分使用场景以及核心思想2.1 一维差分主要思路例题例题源码模板+套路2.2 二维差分思路例题例题源码模板+套路1、差分使用场景以及核心思想给出 n 个数,再给出 m 个询问,每个询问给出 l,r,x,要求你在 l 到 r 上每一个值都加上 x,而只给你 O(n) 的时间范围,怎么办?如果暴力,时间复杂度就是
2022-01-14 20:02:04
6595
17
原创 【多解LeetCode】 142.环形链表 II
142.环形链表 II/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode * judgecircle(struct ListNode *head) { if(head == NULL) return 0; struct ListNode * fast ,* slow
2022-01-13 22:53:47
127
3
原创 C算法模板->大数除法
#include<iostream>#include<vector>#include<algorithm>using namespace std;vector<int> divi (vector<int> &A,int b,int &r){ vector<int> C; for(int i=A.size() -1 ; i>=0 ;i--) //除法是从高位开始算的
2022-01-09 20:15:14
457
14
原创 C算法模板->大数乘法
文章目录源码实现细节源码#include<iostream>#include<vector>const int N = 1e6+10;int q[N];int n;using namespace std;vector<int> mul(vector <int> &A,int b){ vector<int> C; int t=0; for(int i = 0; i < A.size() ||
2022-01-09 12:52:42
459
14
原创 C算法模板->二维前缀和
文章目录前言例题与模板前言对于二维前缀和主要有两个公式理解这两个公式之后就可以套公式即可//1. 求s[i][j]的公式s[i][j] = s[i - 1][j] + s[i][j - 1] -s[i - 1][j - 1] + a[i][j];//2. 求一点 A(x1,y1与 B(x2,y2) 这个字矩阵的和Sab = s[x2][y2] -s[x1 - 1] [y2] - s[x2][y1 - 1] +s[x1 - 1][y1 - 1]例题与模板#include<ios
2022-01-08 22:00:01
460
8
原创 C算法模板->大数减法
#include <iostream>#include <cstring>#include <algorithm>#include <vector>#include <map>using namespace std;bool cmp(vector<int>& A, vector<int>& B) //判断是否A >= B{ if (A.size() != B.size())
2022-01-08 18:55:01
245
5
原创 C算法模板->线性前缀和
#include<iostream>#include<vector>using namespace std;const int N = 1e5+10;int S[N],a[N];int main(){ int n,m; int r,l; cin>>n>>m; for(int i=1;i<=n;i++) cin>>a[i]; //(1) for(int i=1.
2022-01-07 22:46:06
221
10
原创 C算法模板->大数加法
#include <iostream>#include <cstring>#include <algorithm>#include <vector>#include <map>using namespace std;const int N = 1e5+10;int n;int q[N];vector<int>add(vector<int> &A,vector<int> &B)
2022-01-07 12:51:53
298
5
原创 算法模板目录(ing)
文章目录1.排序专区点击这里->归并排序点击这里->快速排序点击这里->快速选择1.排序专区点击这里->归并排序点击这里->快速排序点击这里->快速选择
2022-01-06 22:26:03
524
17
原创 C 算法模板->快速排序
快排#include<iostream>using namespace std;const int N = 1e6+100;int q[N];void quick_sort(int q[],int l,int r){ if(l >= r) return ; int val = q[(l+r)>>1]; int i = l-1,j = r+1; while(i < j) {
2022-01-06 22:24:10
150
6
原创 C算法模板->快速选择算法
#include <iostream>using namespace std;const int N = 1000010;int q[N];int quick_sort( int l, int r, int k){ if (l >= r) return q[l]; int i = l - 1, j = r + 1, x = q[l + r >> 1]; while (i < j) { do i ++ ;
2022-01-01 13:12:31
518
8
原创 【多解LeetCode】|876. 链表的中间结点
文章目录1.两次遍历(一般思路 )2.一次遍历(快慢指针)1.两次遍历(一般思路 )题目给定的很简单,如果不考虑时空复杂度的话可以遍历依次找到节点数N,然后遍历找到mid节点的位置返回即可(mid=N/2)比较简单,代码略2.一次遍历(快慢指针)快慢指针是双指针中比较经典的一个题型主要的核心点就在于对于迭代条件的判断struct ListNode* middleNode(struct ListNode* head){ struct ListNode* fast=head;
2021-12-30 00:23:20
297
5
原创 跨年无聊?不如来和嘉然学链表
这篇文章主要是初步解释链表中的各种函数文章目录1.CreateNode2.SListFind3.SListPrint4.SListInsert==5.SListErase==6.SListPushFront7.SListPushBack8.SListPopBack9.SListPopfront10.SListDestory1.CreateNode作用:创建一个值为 x 的新节点,然后搭配其他函数使用PS:注意返回类型为结构体指针要使用动态开辟空间2.SListFind..
2021-12-28 17:47:11
904
21
原创 浅谈 《数据结构》-->三分钟实现顺序表
文章目录???? 前言1.顺序表的定义???? 前言寒假要开始《算法与数据结构》的学习数据结构系列就先从最简单的顺序表入手吧1.顺序表的定义定义:线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串等而顺序表就是最简单的线性表通俗来讲,顺序表可以理解为数组,因为它在内存中是连续存储、并且数据类型是相同的,但在数组的基础上,还需要从头开始存储,不能跳跃间隔。...
2021-12-25 23:23:13
468
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人