自定义博客皮肤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 121

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

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

2021-04-10 15:10:15 148

原创 算法模板:素数筛法

问题描述给定一个正整数 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 396

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

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

2021-04-01 19:36:37 318

原创 算法模板:判断质数

#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 96

原创 vector size的使用

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

2021-03-31 14:34:27 9263 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 212345输出样例:6#include<iost

2021-03-08 16:21:47 75

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

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

2021-03-07 12:10:49 900

原创 算法模板:并合集

并合集题目描述一共有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];```cppint find(int x){ if(p[x

2021-03-06 14:34:55 2257 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 242

原创 算法模板 求逆序数

求逆序对数这个还是采用了分治的思想,运用了归并排序的模板进行修改首先我们对归并排序进行一下回忆归并排序这里我们发现,如果将区间一份为二,那么的话,逆序数分三种,第一种是两个数同时在左边,第二种是两个数同时在右边,还有一种就是,一个数在左边一个数在右边;#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 139

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

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

2021-02-09 15:51:55 158

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

算法模板,前缀和前缀和设存在数组 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 126

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

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

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

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

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

2021-02-04 11:37:44 168 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 77

原创 算法模板:快速排序

这里写自定义目录标题快速排序#includeusing 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 493 4

空空如也

空空如也

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

TA关注的人

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