自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 枚举、模拟与排序

蓝桥杯

2022-02-19 15:06:02 213

转载 数学与简单DP

数学问题例题:买不到的数目小明开了一家糖果店。他别出心裁:把水果糖包成4颗一包和7颗一包的两种。糖果不能拆包卖。小朋友来买糖的时候,他就用这两种包装来组合。当然有些糖果数目是无法组合出来的,比如要买 10 颗糖。你可以用计算机测试一下,在这种包装情况下,最大不能买到的数量是17。大于17的任何数字都可以用4和7组合出来。本题的要求就是在已知两个包装的数量时,求最大不能组合出的数字。输入格式两个正整数 n,m,表示每种包装中糖的颗数。输出格式一个正整数,表示

2022-02-13 15:50:35 247

原创 二分与前缀和

二分与前缀和

2022-02-10 23:13:50 233

原创 递归与递推

递归与递推

2022-01-18 20:04:26 2072

原创 时空复杂度分析

一般ACM或者笔试题的时间限制是1秒或2秒。在这种情况下,C++代码中的操作次数控制在 107∼108为最佳。下面给出在不同数据范围下,代码的时间复杂度和算法该如何选择:1.n≤30, 指数级别, dfs+剪枝,状态压缩dp2.n≤100 => O(n3),floyd,dp,高斯消元3.n≤1000n≤1000 => O(n2),O(n2logn),dp,二分,朴素版Dijkstra、朴素版Prim、Bellman-Ford4.n≤10000 => O(n∗√n),块状链表

2022-01-15 19:25:08 102

原创 贪心(二):排序不等式、绝对值不等式、推公式

排序不等式绝对值不等式推公式

2022-01-15 15:46:02 193

原创 贪心(一):区间问题、Huffman树

区间问题例题一:区间选点给定 N 个闭区间 [ai,bi]请你在数轴上选择尽量少的点,使得每个区间内至少包含一个选出的点。输出选择的点的最小数量。位于区间端点上的点也算作区间内。输入格式第一行包含整数 N,表示区间数。接下来 N 行,每行包含两个整数 ai,bi,表示一个区间的两个端点。输出格式输出一个整数,表示所需的点的最小数量。数据范围1≤N≤105,−109≤ai≤bi≤109输入样例:3-1 12 43 5输出样例:2解题

2022-01-14 22:15:32 398

原创 动态规划(三):数位统计、状态压缩、树形DP、记忆化搜索

数位统计计数问题例题:给定两个整数a和b,求a和b之间的所有数字中0∼9的出现次数。例如,a=1024,b=1032,则a和b之间共有9个数如下:1024 1025 1026 1027 1028 1029 1030 1031 1032其中0出现10次,1出现10次,2出现7次,3出现3次等等…输入格式输入包含多组测试数据。每组测试数据占一行,包含两个整数a和b。当读入一行为0时,表示输入终止,且该行不作处理...

2022-01-08 22:02:34 109

原创 动态规划(二):线性DP、区间DP

线性DP例题1:数字三角形给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。 7 3 8 8 1 0 2 7 4 44 5 2 6 5输入格式第一行包含整数n,表示数字三角形的层数。接下来n行,每行包含若干整数,其中第i行表示数字三角形第i层包含的整数。输出格式输出一个...

2021-12-16 21:52:09 85

原创 动态规划(一):背包问题

0-1背包例题:01背包问题有N件物品和一个容量 V的背包。每件物品只能使用一次。第i件物品的体积是vi,价值是wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V用空格隔开,分别表示物品数量和背包容积。接下来有N行,每行两个整数vi,wi,用空格隔开,分别表示第i件物品的体积和价值。输出格式输出一个整数,表示最大价值。数据范围0<N,V≤10000&lt...

2021-12-12 13:43:22 820

原创 数学(四):容斥原理、博弈论

容斥原理原理:例题:能被整除的数给定一个整数n和m个不同的质数p1,p2,…,pm请你求出1∼n中能被p1,p2,…,pm中的至少一个数整除的整数有多少个。输入格式第一行包含整数n和m。第二行包含m个质数。输出格式输出一个整数,表示满足条件的整数的个数。数据范围1≤m≤161≤n,pi≤109输入样例:10 22 3输出样例:7解题:#include <iost...

2021-12-10 16:22:57 104

原创 数学(三):高斯消元、求组合数

高斯消元原理:例题:高斯消元解线性方程组输入一个包含n个方程n个未知数的线性方程组。方程组中的系数为实数。求解这个方程组。下图为一个包含mm个方程nn个未知数的线性方程组示例:输入格式第一行包含整数n。接下来n行,每行包含n+1个实数,表示一个方程的n个系数以及等号右侧的常数。输出格式如果给定线性方程组存在唯一解,则输出共n行,其中第i 行输出第 i个未知数的解,结果保留两位小数。如果给定线性方程组存在无数解,则输出...

2021-12-08 13:21:59 208

原创 数学知识(二):欧拉函数、快速幂、扩展欧几里得算法、中国剩余定理

欧拉函数快速幂扩展欧几里得算法中国剩余定理

2021-12-05 22:18:47 844 1

原创 数学知识(一):数论

质数 在大于1的整数中,如果只包含1和本身这两个约数,就被称为质数,或者叫素数。(1)质数判定试除法代码:#include <iostream>#include <algorithm>using namespace std;bool is_prime(int n){ if(n<2) return false;//先判断是否大于1 for(int i=2;i<=n/i;i++)//从2到n-是不是包含n的约数 ..

2021-12-04 17:09:59 1224

原创 搜索与图论(三):最小生成树、二分图

最小生成树普利姆算法(Prim):稠密图:朴素版Prim O(n^2)例题:Prim算法求最小生成树给定一个n个点m条边的无向图,图中可能存在重边和自环,边权可能为负数。求最小生成树的树边权重之和,如果最小生成树不存在则输出impossible。给定一张边带权的无向图G=(V,E),其中V表示图中点的集合,E表示图中边的集合,n=|V|,m=|E|由V中的全部n个顶点和E中n−1 条边构成的无向连通子图被称为G的一棵生成树,其中边的...

2021-12-02 10:44:16 153

原创 搜索与图论(二):最短路径(没有负环)

n为图点的数量,m为图边的数量最短路:单源最短路、多源最短路单源最短路:多源最短路:Floyd算法 O(n^3)朴素Dijkstra算法(稠密图)例题:Dijkstra求最短路 I给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为正值。请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出−1输入格式第一行包含整数n和m。接下来m行每行包含三个整数x,y,z表示...

2021-12-01 14:00:00 289 1

原创 搜索与图论(一):深度优先搜索、宽度优先搜索、树与图的存储、树与图的深度优先遍历、树与图的宽度优先遍历、拓扑排序

DFS:例题:排列数字给定一个整数n,将数字1∼n排成一排,将会有很多种排列方法。现在,请你按照字典序将所有的排列方法输出。输入格式共一行,包含一个整数n。输出格式按字典序输出所有排列方案,每个方案占一行。数据范围1≤n≤7输入样例:3输出样例:1 2 31 3 22 1 32 3 13 1 23 2 1解题思路:解题代码:#include <iostream>using namespa...

2021-11-30 19:13:12 579

原创 数据结构(三)哈希表 、STL使用技巧

哈希表例题:拉链法模拟散列表维护一个集合,支持如下几种操作:I x,插入一个数xx; Q x,询问数xx是否在集合中出现过;现在要进行N次操作,对于每个询问操作输出对应的结果。输入格式第一行包含整数N,表示操作数量。接下来N行,每行包含一个操作指令,操作指令为I x,Q x中的一种。输出格式对于每个询问指令Q x,输出一个询问结果,如果xx在集合中出现过,则输出Yes,否则输出No。每个结果占一行。数据范围1≤N...

2021-11-24 22:11:56 346 2

原创 数据结构(二)Trie、并查集、堆

Trie:高效地存储和查找字符串集合的数据结构例题:Trie字符串统计维护一个字符串集合,支持两种操作:I x向集合中插入一个字符串x; Q x询问一个字符串在集合中出现了多少次。共有N个操作,输入的字符串总长度不超过105,字符串仅包含小写英文字母。输入格式第一行包含整数N,表示操作数。接下来N行,每行包含一个操作指令,指令为I x或Q x中的一种。输出格式对于每个询问指令Q x,都要输出一个整数作为结果,表示xx在集合中出现的...

2021-11-24 00:58:42 90

原创 数据结构基础(一):链表与邻接表,栈与队列,KMP

链表单链表:用来写邻接表邻接表:存储图、树用数组来模拟单链表e[N]:表示当前节点元素ne[N]:表示下一节点例题:实现一个单链表,链表初始为空,支持三种操作:向链表头插入一个数; 删除第k个插入的数后面的数; 在第k个插入的数后插入一个数。现在要对该链表进行M次操作,进行完所有操作后,从头到尾输出整个链表。注意:题目中第k个插入的数并不是指当前链表的第k个数。例如操作过程中一共插入了n个数,则按照插入的时间顺序,这n个数依次为:第...

2021-11-10 17:13:33 616

原创 区间合并算法笔记

给定n个区间[li,ri],要求合并所有有交集的区间。注意如果在端点处相交,也算有交集。输出合并完成后的区间个数。例如:[1,3]和[2,6]可以合并为一个区间[1,6]输入格式第一行包含整数n。接下来n行,每行包含两个整数l和r。输出格式共一行,包含一个整数,表示合并区间完成后的区间个数。数据范围1≤n≤100000−109≤li≤ri≤109输入样例:51 22 45 67 87 9输出样例:3...

2021-11-04 23:14:41 102

原创 离散化算法笔记(保序)

离散化含义:例题:假定有一个无限长的数轴,数轴上每个坐标上的数都是0。现在,我们首先进行nn次操作,每次操作将某一位置x上的数加c。接下来,进行m次询问,每个询问包含两个整数l和r,你需要求出在区间[l,r]之间的所有数的和。输入格式第一行包含两个整数n和m。接下来n行,每行包含两个整数x和c。再接下来m行,每行包含两个整数l和r。输出格式共m行,每行输出一个询问中所求的区间内数字和。数据范围−109...

2021-11-04 22:03:47 345 1

原创 位运算笔记

例题:给定一个长度为n的数列,请你求出数列中每个数的二进制表示中1的个数。输入格式第一行包含整数n。第二行包含n个整数,表示整个数列。输出格式共一行,包含n个整数,其中的第i个数表示数列中的第i个数的二进制表示中1的个数。数据范围1≤n≤10000010≤数列中元素的值≤109输入样例:51 2 3 4 5输出样例:1 1 2 1 2解题代码:#include <i...

2021-11-04 18:06:52 48

原创 双指针算法笔记

思想:例题:给定一个长度为n的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度。输入格式第一行包含整数n。第二行包含n个整数(均在0∼105 范围内),表示整数序列。输出格式共一行,包含一个整数,表示最长的不包含重复的数的连续区间的长度。数据范围1≤n≤105输入样例:51 2 2 3 5输出样例:3解题代码:#include <iostream>using namespace std;c...

2021-11-04 16:46:09 168

原创 前缀和与差分笔记

一维前缀和思想:问题:为什么下标从1开始:为了定义s0为什么定义s0=0:为了处理边界,比如:[1,10]的和,即:s10-s0,其实就是s10。例题:输入一个长度为n的整数序列。接下来再输入m个询问,每个询问输入一对l,r。对于每个询问,输出原序列中从第l个数到第r个数的和。输入格式第一行包含两个整数n和m。第二行包含n个整数,表示整数数列。接下来m行,每行包含两个整数l和r,表示一个询问的区间范围。输出格式共m...

2021-10-31 17:29:29 70

原创 高精度问题笔记

大整数的存储通常用数组来存储例如:整数:123456789,用数组q[n]来存储的话,q[0]位放在个位,也就是9,然后是十位,依此类推。理由:在做运算的时候,可能发生进位,就需要在高位上补1,在数组中,在末尾补上一个数是最容易的。大整数的运算加法:例题给定两个正整数(不含前导00),计算它们的和。输入格式共两行,每行包含一个整数。输出格式共一行,包含所求的和。数据范围1≤整数长度≤1000001≤整数长度≤100000输入样例:1223..

2021-10-31 15:12:18 303

原创 二分查找算法笔记

基本思路:y总二分模板:二分模板一共有两个,分别适用于不同情况。算法思路:假设目标值在闭区间[l, r]中, 每次将区间长度缩小一半,当l = r时,我们就找到了目标值。版本1当我们将区间[l, r]划分成[l, mid]和[mid + 1, r]时,其更新操作是r = mid或者l = mid + 1;,计算mid时不需要加1。C++ 代码模板:int bsearch_1(int l, int r){ while (l < r) { ...

2021-10-29 21:06:52 120

原创 归并排序笔记

代码模板#include <iostream>using namespace std;const int N=1000010;int n;int q[N],tmp[N];void merge_sort(int q[], int l, int r){ //递归的终止情况 if(l >= r) return; //第一步:分成子问题 int mid = l + r >> 1; //第二步:递归处理子问题 m

2021-10-28 11:49:13 172

原创 快速排序笔记

代码模板:#include <iostream>using namespace std;const int N = 1000010;int q[N];void quick_sort(int q[], int l, int r){ if (l >= r) return; int i = l - 1, j = r + 1, x = q[l + r >> 1]; while (i < j) { do i

2021-10-28 00:00:37 89

空空如也

空空如也

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

TA关注的人

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