自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 线性素数筛法

#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int N = 1e6 + 10; bool st[N]; int cnt,prime[N]; int n; void div() { for(int i = 2; i <= n ; i ++ )//对于所有的数我么都要判断一下他是不是质数

2021-04-15 20:43:15 168

原创 关于01背包问题,优化到一维时的下标问题

关于01背包问题,优化到一维时的下标问题 首先我们都知道01背包问题是两重循环,第一层循环是循环当前决策物品的编号,第二层循环是决策当前背包的体积,首先第i次的决策是建立在第i-1次决策的基础上,简单来说,就是上一次的决策对我们这一次的决策是有根本性的影响的,所以要保留这种影响,如过我们内层循环是从小开始的,那么我们上一次的决策结果会被这一次的更新所覆盖 ...

2021-04-10 15:10:15 197

原创 算法模板:素数筛法

问题描述 给定一个正整数 n,请你求出 1∼n 中质数的个数。 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N = 1000010; int primes[N],cnt; bool st[N]; int n; void get_primes(int n) { for(int i

2021-04-01 20:32:02 469

原创 算法模板:分解质因子

问题描述 给定 n 个正整数 ai,将每个数分解质因数,并按照质因数从小到大的顺序输出每个质因数的底数和指数。 输入格式 第一行包含整数 n。 接下来 n 行,每行包含一个正整数 ai。 输出格式 对于每个正整数 ai,按照从小到大的顺序输出其分解质因数后,每个质因数的底数和指数,每个底数和指数占一行。 每个正整数的质因数全部输出完毕后,输出一个空行。 数据范围 1≤n≤100, 1≤ai≤2×109 输入样例: 2 6 8 输出样例: 2 1 3 1 2 3 #include<iostream&gt

2021-04-01 19:36:37 397

原创 算法模板:判断质数

#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int n; int main(void) { cin>>n; while(n--) { int k = 0 ; cin>>k; if(k < 2) {

2021-04-01 19:27:10 137

原创 vector size的使用

vector size的使用 0、vector中size函数的返回值是一个无符号类型,当size是0的时候,对其进行–,会造成数字的越界溢出 1、size是指向vector中数组长度后的那一个位置,即size处没有元素 2、vector的下标是从零开始的; ...

2021-03-31 14:34:27 9514 1

原创 算法模板:前缀和习题,k倍区间

K倍区间 问题描述 给定一个长度为 N 的数列,A1,A2,…AN,如果其中一段连续的子序列 Ai,Ai+1,…Aj 之和是 K 的倍数,我们就称这个区间 [i,j] 是 K 倍区间。 你能求出数列中总共有多少个 K 倍区间吗? 输入格式 第一行包含两个整数 N 和 K。 以下 N 行每行包含一个整数 Ai。 输出格式 输出一个整数,代表 K 倍区间的数目。 数据范围 1≤N,K≤100000, 1≤Ai≤100000 输入样例: 5 2 1 2 3 4 5 输出样例: 6 #include<iost

2021-03-08 16:21:47 120

原创 算法模板:递推算法--开关问题

开关问题 这一类问题是,调用一些开关,每一次对某一个开关进行操作,会使周围的开关也进行转台的改变; 这一类问题属于递推问题,可以对某一些开关进行枚举,然后递推得到答案; 问题描述 你玩过“拉灯”游戏吗? 25 盏灯排成一个 5×5 的方形。 每一个灯都有一个开关,游戏者可以改变它的状态。 每一步,游戏者可以改变某一个灯的状态。 游戏者改变一个灯的状态会产生连锁反应:和这个灯上下左右相邻的灯也要相应地改变其状态。 我们用数字 1 表示一盏开着的灯,用数字 0 表示关着的灯。 下面这种状态 10111 0110

2021-03-07 12:10:49 1019

原创 算法模板:并合集

并合集 题目描述 一共有n个数,编号是1~n,最开始每个数各自在一个集合中。 现在要进行m个操作,操作共有两种: “M a b”,将编号为a和b的两个数所在的集合合并,如果两个数已经在同一个集合中,则忽略这个操作; “Q a b”,询问编号为a和b的两个数是否在同一个集合中; #include<iostream> using namespace std; const int N = 1e6 + 10; int p[N]; ```cpp int find(int x) { if(p[x

2021-03-06 14:34:55 2372 6

原创 算法模板:递归的总结,指数枚举,全排列,组合问题

递归的总结 这篇讨论三个排列组合的问题: 1、指数形式的枚举; 2、全排列问题; 3、组合问题‘ 指数形式的枚举 题目描述 从 1∼n 这 n 个整数中随机选取任意多个,输出所有可能的选择方案。 #include<iostream> using namespace std; const int N = 16; int used[N],n; void dfs(int u) { if(u>n) { for(int i = 1; i <= n ; i

2021-03-06 10:52:32 300

原创 算法模板 求逆序数

求逆序对数 这个还是采用了分治的思想,运用了归并排序的模板进行修改 首先我们对归并排序进行一下回忆归并排序 这里我们发现,如果将区间一份为二,那么的话,逆序数分三种,第一种是两个数同时在左边,第二种是两个数同时在右边,还有一种就是,一个数在左边一个数在右边; #include<iostream> using namespace std; typedef long long LL; const int N = 1e5 + 10; int n,q[N],temp[N]; LL merge_so

2021-02-09 21:11:33 176

原创 算法模板:快排应用——快速选择算法

快速选择排序 快排的简单回顾 这是一种基于快速排序的应用算法,我们先来回顾一下快速排序快速排序模板 快排有三个步骤 0、选择一个支点; 1、根据指点将整个数组划分为两部分,第一部分为小于等于支点x的数,另一部分为大于等于支点x的数; 2、递归调用函数,对左右两边进行排序; 快速选择算法 快速选择算法是基于快排的,快排第三步是对左右两个区间同时进行递归,而快速选择算法可以根据要查找的数据对区间进行一种缩小; #include<iostream> using namespace std; con

2021-02-09 15:51:55 218

原创 算法模板:前缀和、差分

算法模板,前缀和 前缀和 设存在数组 a1,a2,a3,a4,……an; 前缀和数组Si = ai + a2+ a3 +……+ai;这里一定要注意下标是从1开始; 前缀和的作用 能够快速求出原数组的一段和; 代码 #include<iostream> using namespace std; const int N = 1e6 + 10; int a[N], s[N]; int m,n; int main() { scanf("%d%d",&n,&m); f

2021-02-08 11:40:56 167

原创 算法模板:高精度运算

算法模板高精度运算 高精度运算 高精度运算是存在与c++,c中的一系列的问题,在cpp中没有大整数这个类型,大整数(高精度数)的存储是依赖数组实现的,数组实现高精度数的存储有两种方式,第一种方式是,数组的低位存储位权大的数组,这种方式与我们平时书写是一致的,这种存储方式称为大端存储,还有一种方式,也就是小端存储,这种方式存储的与我们平时书写是相反的;在高精度运算中我们采用小端存储;这样做的有点在于进位方便,只需要在数组的最后面一案件元素就行了,不涉及元素的移动; 高精度加法运算 高精度加法运算是两个很大的整

2021-02-05 22:03:12 215 1

原创 算法模板:整数的二分查找

二分查找的本质是边界效应; 给定一个区间,在上面定义一种性质,使得左右区间一分为二,左边的区间都满足性质A,而右边的区间都不满足性质A,运用二分查找可以找出这个边界; 具体过程 先取mid = (l+r)/2,然后检验mid的性质, 如果mid具有性质A(即mid在左边区间),则边界一定在mid的右边,可已修改区间,令左边界l = mid,再重复上面的过程; 如果mid不具有性质A,则边界一定在mid的左边; 整数的二分的难点 难点在于存在复杂的边界分析,下面我们来看一下代码; 代码的目的 是为了确定在一个

2021-02-04 11:37:44 220 1

原创 算法模板:归并排序

#include<iostream> using namespace std; const int N = 1e6 + 10; int n; int q[N],temp[N]; void merge_sort(int q[],int l, int r) { if(l >= r) return; int mid = (l+r)/2; merge_sort(q, l, mid),merge_sort(q,mid+1,r); int k = 0

2021-02-03 20:53:10 108

原创 算法模板:快速排序

这里写自定义目录标题 快速排序 #include using namespace std; int n; const int N = 1e6+10; int q[N]; void quick_sort(int q[],int l ,int r) { if(l >= r) return; int x = q[l]+q[r]>>1; int i = l -1, j = r + 1; while(i < j) { do i++;while(q[i]<x); do j–;while(q

2021-02-03 20:07:27 580 4

空空如也

空空如也

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

TA关注的人

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