算法
菜狗原来是我自己
菜狗是我了
展开
-
筛,都可以筛.jpg
筛质数给定一个正整数 nnn,请你求出 1∼n1∼n1∼n 中质数的个数。一,质朴筛thinking如果一个数,他是遍历之前的一个数的倍数,那么它肯定不是一个质数这就是关于质朴筛的思想codevoid get_primes2(){ for(int i=2;i<=n;i++){ if(!st[i]) primes[cnt++]=i;//把素数存起来 for(int j=i;j<=n;j+=i){//不管是合数还是质数,都用来筛掉后面它的倍数原创 2021-10-02 11:05:07 · 78 阅读 · 1 评论 -
最优美的算法之一 —— 单调队列
最优美的算法之一 —— 单调队列应用在了解单调队列之前,我们可以看一看有关单调队列的应用给定一个长度为n的数组,给定一个k,使得在[i, i + k]这样的区间内的,分别输出的这个区间内的最大值和最小值。如果是暴力思维的话,那么就可以直接遍历这里面所有的n,找到里面的最小的数和最大的数。代码的话就是这样n, m = map(int,input().split())#python versionmaxn = []minn = []num = list(map(int,input().spli原创 2021-09-07 15:24:58 · 206 阅读 · 0 评论 -
质数——因式分解
因式分解文章目录因式分解一、因式分解是什么二、如何实现1.题面2.代码实现与思路总结一、因式分解是什么不断地分解因式,例如二、如何实现1.题面2.代码实现与思路代码如下(示例):#include<bits/stdc++.h>using namespace std;void dive(int n){ for(int i = 2; i <= n/i; i++) { if(n % i == 0) { int s = 0; while(原创 2021-08-28 16:35:24 · 393 阅读 · 0 评论 -
快速幂的实现
as we all know,快速幂是一种实现a ^ k % p的算法如果直接暴力搜的话,我们知道那是一中O(n)的实现the core code is itll sum = 1;for(int = 0; i < k; i++){ sum = sum * a % q;}cout << sum << endl;但是的这种算法对于1e9的计算量实在实在是有些相形见绌了所以就有了快速幂这样的一个算法而这个算法的核心在于如图将问题转化为预处理这个区间内原创 2021-08-19 20:06:58 · 61 阅读 · 0 评论 -
整数分块(Integer block)
整数分块这样的方法使用与计算n以内的n/i的和;for example以n = 10为例子我们发现这样我们就把10的计算转化为只需要5次的计算在我们的计算下面,在理论上是可以logn的计算的ll res = 0;for(int l = 1, r; l <= n; l = r + 1){ r = n / (n / l);//定义右边界 res += (r - l + 1) * (n / l);}...原创 2021-08-19 16:53:31 · 843 阅读 · 1 评论 -
树的深度优先搜索
first, it, is a tree;so,let’s see what can you do to dfs it;firstly, we see the root like one;than, we diffusion the root to other node which is linked with it at first;do the samething again untill you can not;then, you comeback and do the thing .原创 2021-08-19 11:36:45 · 98 阅读 · 1 评论 -
关于bfs的原理和应用
1,bfs 是个什么玩意???这是百度对于bfs的描述,太复杂了?没关系,我用一个走迷宫的题目来带大家了解bfs;题目对应代码 memset(d, -1, sizeof d); d[0][0] = 0;相关代码可以使用方向向量的方式 int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1}; const int N = 110;int n, m;int g[N][N];int d[N][N];PII q[N * N];i原创 2021-08-18 15:34:35 · 210 阅读 · 1 评论 -
二分查找的几种情况
int search(int a[], int n, int target)//迅速找到一个值 { int l = 0, int r = n - 1; int mid = l + r >> 1; while(a[mid] != target){ if(a[mid] > target) mid = r; else mid = l; mid = l + r >> 1; } return mid;} int search(int a[], int n,.原创 2021-08-17 17:39:37 · 45 阅读 · 0 评论 -
并查集的原理和应用
并查集,简单的来说可以进行两种操作,那么这两种操作是如何实现的呢?我们以5个点的情况作为样例来作为情况来考虑我们先将所有的集合都视为一个数,然后定义每个树的父节点p[x]然后我们来进行两个操作第一个操作合并这里表示的就是将1集合和5集合进行合并即将5的父节点指向1;查询那就更容易了,我们只需要判断a,b两个数的根节点是否相同即可原题链接代码#include<iostream>using namespace std;const int N = 1000原创 2021-08-15 19:07:39 · 55 阅读 · 3 评论