
算法
文章平均质量分 73
算法
「已注销」
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
学弟讲算法-数论-欧几里得算法
欧几里得算法最大公约数 gcdll gcd(ll a, ll b){ return b == 0 ? a :gcd(b, a%b);}C++ algorithm 库内置有__gcd(a,b)函数用以求最大共约数最小公倍数 lcmlcm(a,b) = a∗bgcd(a,b)\frac{a*b}{gcd(a,b)}gcd(a,b)a∗b//先除再乘避免溢出ll lcm(ll a, ll b){ return a/gcd(a,b) * m;}积性函数f(mn原创 2020-11-01 18:23:54 · 314 阅读 · 0 评论 -
学弟讲算法-图论-线段树
一、定义用一颗二叉树来表示线段树,线段树的每个节点表示一个区间;每个非叶子节点均有左右两颗子树,对于区间的左半与右半部分给根节点编号 1;对于节点 i,其左节点的编号为 2i,右节点编号为 2i+1对于任意节点,其表示的区间范围为[l,r]:若 l=r,则此为叶子节点否则令 mid = ⌊l+r2⌋\lfloor {\frac{l+r}{2}} \rfloor⌊2l+r⌋,左儿子对于[l,mid][l,mid][l,mid]区间,右儿子对应[mid+1,r][mid+1,r][mid+1,r]原创 2020-11-01 15:47:33 · 306 阅读 · 0 评论 -
学弟讲算法-数论-欧拉函数
欧拉函数定义φ(n)\varphi(n)φ(n),对于一个正整数 n,小于 n 且和 n 互质的正整数(包括 1)的个数φ(n)=n∏(1−1pi)\varphi(n) = n\prod (1-\frac{1}{p_i})φ(n)=n∏(1−pi1) 其中pip_ipi为 n 的所有质因数,n 是不为 0 的整数;φ(1)\varphi(1)φ(1)=1,唯一和 1 互质的数就是 1 本身.解释:对于 n 的一个质因数pip_ipi,在 n 以内pip_ipi的倍数均匀分布n原创 2020-10-30 16:38:27 · 301 阅读 · 1 评论 -
学弟刷蓝桥杯-DFS-分考场
一、题目二、分析使用 DFS 搜索对每一个人,判断能否给他安排进当前的 n 间教室里,若能则继续搜索下一位若安排不了,则新开一间教室把他安排进去上述两种情况都会出现回溯三、代码#include<iostream>using namespace std;//记录人员关系int p[101][101];//记录每个教室里的人数int cnt[101];//记录每个教室的安排情况int room[101][101];int ans = 0x7fff原创 2020-10-29 14:06:40 · 171 阅读 · 0 评论 -
2020第十一届蓝桥杯C++省赛B组题解 (10月第二场)
一年一度的暴力杯终于打完了试题 A 门牌制作【问题描述】小蓝要为一条街的住户制作门牌号.这条街一共有 2020 位住户,门牌号从 1 到 2020 编号.小蓝制作门牌的方法是先制作 0 到 9 这几个数字字符,最后根据需要将字符粘贴到门牌上,例如门牌 1017 需要依次粘贴字符 1、 0、 1、 7,即需要 1 个字符 0, 2 个字符 1, 1 个字符 7.请问要制作所有的 1 到 2020 号门牌,总共需要多少个字符 2?【答案提交】这是一道结果填空的题,你只需要算出结果后提交即可.本原创 2020-10-28 15:25:57 · 4806 阅读 · 4 评论 -
学弟刷蓝桥杯-方格分割
题目标题:方格分割6x6的方格,沿着格子的边线剪开成两部分.要求这两部分的形状完全相同.如图:p1.png, p2.png, p3.png 就是可行的分割法.试计算:包括这3种分法在内,一共有多少种不同的分割方法.注意:旋转对称的属于同一种分割法.请提交该整数,不要填写任何多余的内容或说明文字.分析沿着格子的边线剪开成两部分,且这两部分的形状完全相同,则这个边线是关于中心对称的,6x6的方格中心是顶点(3,3),顶点从(0,0)开始从中心顶点(3,3)开始搜索,每次搜索上下左右四原创 2020-10-13 13:53:30 · 280 阅读 · 0 评论 -
学弟刷蓝桥杯-二分-喝可乐
题目可乐有一个很经典的活动:四个瓶盖可以换一瓶可乐.现在蒜头君一共想喝 n瓶可乐,一瓶可乐需要 m 元,请问他最少需要花多少钱?他不可以向别人借瓶盖.输入格式第一行一个整数 t,表示接下去有t 组询问.接下去 t 行每行包含两个整数 n, m;n,m,含义如题.输出格式每行输出一个整数表示蒜头君最少要花的钱.数据范围对于 20% 的数据,t<=20,n<=50t;对于 100% 的数据,t≤10000,0≤n≤100000000,1≤k≤200思路假设和x瓶可乐,加上其换的原创 2020-10-05 18:39:43 · 320 阅读 · 0 评论 -
学弟刷PTA·字符串问题·我要通过!
题目“答案正确"是自动判题系统给出的最令人欢喜的回复.本题属于 PAT 的"答案正确"大派送 —— 只要读入的字符串满足下列条件,系统就输出"答案正确”,否则输出"答案错误".得到"答案正确"的条件是:字符串中必须仅有 P、 A、 T这三种字符,不可以包含其它字符;任意形如 xPATx 的字符串都可以获得"答案正确",其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;如果aPbTc是正确的,那么 aPbATca也是正确的,其中 a、 b、 c 均或者是空字符串,或者是仅由字母 A 组原创 2020-09-05 09:28:26 · 265 阅读 · 0 评论 -
学弟讲算法-数论-滑动窗口最值
题目给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位实例输入: nums = [1,3,-1,-3,5,3,6,7], k = 3输出: [3,3,5,5,6,7]滑动窗口的位置最大值[1 3 -1] -3 5 3 6 731 [3 -1 -3] 5 3 6 731 3 [-1 -3 5] 3 6 751 3 -1 [-3原创 2020-09-03 23:23:55 · 199 阅读 · 0 评论 -
学弟讲算法-动态规划-实例
动态规划思路原问题 子问题中间状态边界值状态转移方程例1数组最优解从n个数的数组,取出若干个数两两不相邻的数,求取出的数最大和原问题 : n个数取出和最大的最优解子问题 : 前1个数的最优解,前2个数的最优解…前n个数的最优解…中间状态 : dp[i]代表前i个数的最优解,最终需求dp[n]边界值 : dp[1] = a[1] dp[2] = max(dp[1] ,a[2])状态转移方程 : 前i个数的最优解,重点是考虑加不加第i个数a[i];若不加可从dp原创 2020-08-13 23:59:38 · 211 阅读 · 0 评论 -
学弟讲算法-DFS-部分和问题
类型一n个数中选k个数使其和为sum,求方案数方案一遍历每一个数,分别dfs选该数与不选该数的情况,选完n个数后判断和是否为sum//代表方案数int ans;//代表第1到第n个数int a[n+1];//i为选择到了第i个数,count为已经选择了数的个数,sum为当前总和void dfs(int i,int count,int s){ if(i == n){ if(count == k && s == sum){ a原创 2020-08-11 23:25:27 · 246 阅读 · 0 评论 -
学弟讲数据结构·查找算法
顺序查找顺序查找也称为线形查找,属无序查找算法查找方式 : 从线性表一端开始顺序扫描,依次将扫描到的结点值与定值比较,若相等则查找成功;若扫描结束仍没有找到则查找失败。平均查找长度 : ASL = 1/n(1+2+3+…+n) = (n+1)/2 ;时间复杂度 : O(n)template<class T>int sequenceSearch(vector<T> v,T value){ for(int i = 0,size = v.size原创 2020-07-21 10:51:53 · 110 阅读 · 0 评论 -
学弟讲算法-树状数组
文章目录一、概念二、性质1. 区间范围2. 更新3. 区间和一、概念蓝色A[i]表示输入的数组;绿色C[i]表示对应的树状数组定义C[i]的值为它所有子结点值和A[i]的总和,存在:C[1] = A[1]C[2] = C[1] + A[2] = A[1] + A[2]C[3] = A[3]C[4] = C[2] + C[3] + A[4] = A[1] + A[2] + A[3] + A[4]C[5] = A[5]C[6] = C[5] + A[6] = A[5] + A[6]C[原创 2020-07-17 11:56:00 · 158 阅读 · 0 评论 -
学弟讲数据结构·树·平衡二叉树
文章目录一、概念二、实现节点定义1. 获取节点信息2. 判断3. 旋转3.1 左旋3.2 右旋3.3 先右旋后左旋3.4 先左旋后右旋一、概念平衡二叉树树中任意结点的平衡因子(左子树高度 - 右子树高度)绝对值不超过1树中的每个左子树和右子树都是AVL树AVL树是特殊的二叉搜索树AVL树的旋转操作是指在平衡因子大于1时, 通过旋转来调整树的结构, 使平衡因子不超过1标记平衡因子(左子树高度 - 右子树高度)该树为AVL树二、实现节点定义template <class原创 2020-07-15 22:26:56 · 248 阅读 · 0 评论 -
学弟讲数据结构-图论-树-二叉排序树
文章目录一、概念二、性质节点定义2.1 查找2.2 插入2.3 构建2.4 删除2.5 遍历一、概念二叉排序树:Binary Sort Tree(BST),也称二叉查找树二叉排序树为非空树时有如下特点:若左子树非空,则左子树上所有结点值均小于其根结点值若右子树非空,则右子树上所有结点值均大于其根结点值其左、右子树本身也是一棵二叉排序树没有键值相等的结点对该树进行中序遍历(LDR) : 9 11 23 45 58 76结论 :中序遍历二叉排序树时会得到一个递增的有序序列二、性质原创 2020-07-14 16:03:16 · 555 阅读 · 0 评论 -
学弟教程-十进制转其他进制
文章目录一、实验目的二、实验过程2.1 C/C++2.2 Python一、实验目的将十进制数转化为其他进制的数二、实验过程2.1 C/C++使用自带函数itoa(num,str,n);num 十进制数str char数组,用来存储结果n 代表准备转换的进制例int num = 15;char str[30];//将15转为2进制itoa(num , str, 2);//将15转为16进制itoa(num , str, 16);完整代码#include原创 2020-06-25 22:08:48 · 192 阅读 · 0 评论 -
学弟讲算法-排序-冒泡、插入、快速、堆排序合集
一、实验目的使用C++实现几种常用的排序方法二、实验环境GCC 4.9.2三、实验过程3.1 冒泡排序//冒泡排序,len为数组长度void bubbleSort(int data[],int len) { for(int i = 0; i< len-1; i++) { //用来记录是否发生过交换 bool exchange = false; for(int j = 0; j<len-1; j++) { if(data[j] > data[j+1]) {原创 2020-06-20 13:36:18 · 207 阅读 · 0 评论 -
学弟讲数据结构-图论-树-哈夫曼树与编码
一、 实验目的通过C++实现对哈夫曼树的建立与编码二、 实验环境Windows 10 1909Devc++ 5.17三、 实验过程3.1 初始化值节点权值A12B24C35D67E46F553.1 建立哈夫曼树每次从所有节点中选出最小权值节点与次小权值节点,合并,重复操作至所有节点合并为一棵树3.2 哈夫曼编码对建立好的哈夫曼树,所有左儿子编为0,右儿子编为1,实现对各节点的编码四、 代码实现4.1 数据定义原创 2020-05-25 11:05:55 · 782 阅读 · 0 评论 -
C++实现欧拉降幂
欧拉降幂一、问题引出 例:求的值?二、问题分析 首先,面对这么大的幂方,无论是pow()函数还是快速幂算法都是无法求解的,这时我们将引入欧拉降幂算法,它的特点就是能够降低幂方的值且不影响最终结果,这样我们就能在段时间能计算出上述算式的值了。 欧拉降幂公式: 其中,代表 c 的欧拉函数值。三...原创 2019-05-12 21:59:33 · 582 阅读 · 0 评论 -
学弟教程-C++-Sort函数的用法
Sort函数的用法1.头文件#include <algorithm>#include <functional>2.数组排序typedef dataType int;//升序sort( begin, end, less<dataType>() );//降序sort( begin, end, greater<dataType>()...原创 2019-02-20 01:12:54 · 254 阅读 · 0 评论 -
二分查找(浅谈)
一,概念 二分查找是将数组a [n]的中的N个元素分成大致相等的两部分,取A [N / 2]与待查找值X做比较,如果X = a [N / 2],则找到X ;如果X <a [N / 2],则只要在数组一个的左半部分继续搜索的x,如果X> a [N / 2],则只要在数组一个的右半部搜索X. 二分法简而言之就是一种能够快速缩小查找范围的查找方法,每次都...原创 2018-11-14 22:15:12 · 248 阅读 · 0 评论 -
学弟讲算法·二进制枚举
前提:熟知二进制按位与位移运算;若不清楚请移步 二进制,按位与,位移运算相关概念(二进制枚举的基本概念)一,基本概念 二进制枚举是枚举算法中的一种特例,其主要运用在求某一集合的子集个数这一算法中。其基本概念就是利用二进制数中的1与0代表选择与否,其中1代表选,0代表不选。二,实际应用 例一:给定集合A = {2,3,4},求A的子集,并...原创 2018-11-13 15:16:45 · 1761 阅读 · 2 评论 -
学弟讲算法-数论-快速幂
一、问题提出求 3133^{13}313二、问题研究2.1 常规算法3133^{13}313 = 3 * 3 * 3 * 3 * 3 * 3 * 3 * 3 * 3 * 3 * 3 * 3 * 3需要算14次,太麻烦,不符合程序员的逼格2.2 快速幂(13)10(13)_{10}(13)10 = (1101)2(1101)_2(1101)2 = 1 * 232^323 + 1 * 222^222 + 0 * 212^121 + 1 * 202^0203133^{13}313 = 31∗原创 2020-06-24 17:05:14 · 319 阅读 · 0 评论 -
学弟讲算法-图论-SPFA求最短路
一、实验目的通过SFPA算法求出某个点到其余点的最短路径二、实验环境gcc 4.9.2三、实验过程3.1 理论方法1.建立一个队列,存入开始节点2.队列不为空时:取出队头节点X,X出队遍历与X节点相通的节点Y,若X到Y的距离可缩小(松弛),且Y不在队列中则将Y入队,继续操作2为求A节点到其余节点的最短路.设定 p[i]为A到i节点的路径初始状态,建立点A到其余各点的最短路径ABCDEp[i]0∞∞∞∞点A进入队列,若队列非空时:队头原创 2020-06-21 23:18:00 · 298 阅读 · 0 评论 -
学弟讲算法-图论-A* 算法求八数码(纯代码)
文章目录一、实验目的二、实验环境三、实验过程3.1 bashuma.h文件3.2 bashuma.cpp文件3.3 main.cpp文件四、运行结果一、实验目的通过A*算法求出八数码的最少移动次数和移动过程的路径二、实验环境CLion三、实验过程3.1 bashuma.h文件//// Created by _casper on 2019/11/10.//#ifndef BASHUMA_BASHUMA_H#define BASHUMA_BASHUMA_H#include <io原创 2020-06-21 16:29:04 · 543 阅读 · 0 评论 -
学弟讲算法-图论-并查集与最小生成树
文章目录一、实验目的二、实验环境三、实验过程3.1 并查集3.2 最小生成树3.3 完整测试代码一、实验目的给定一个无向图,求最小生成树二、实验环境gcc 4.9.2三、实验过程3.1 并查集数据定义// x的父亲是yp[x] = y;//初始化void init(int i){ //初始状态时i的父亲就是它本身 p[i] = i;}查询//查询i的节点的源头int find(int i){ int b = i; //当i的父亲不是它本身时,原创 2020-06-20 20:32:16 · 225 阅读 · 0 评论 -
学弟讲算法-大数加减
目录一、实验目的二、实验环境三、实验过程3.1 大数加法3.2 大数减法一、实验目的使用C++实现大数的加减二、实验环境GCC 4.9.2三、实验过程3.1 大数加法例1: 无进位情况string a = “12345” , string b = “789”利用数组逆序存储两个数字,来求和与进位图示:求和结果为13134例2:有进位情况string a = “99769” , string b = “231”实现代码//大数加法string addNum(string a原创 2020-06-20 19:28:10 · 553 阅读 · 0 评论