算法学习
疯狂奔跑的少年
砥砺前行,不断进取
展开
-
2020蓝桥杯合并检测
7月5日的蓝桥杯b组的原题也陆续出来,今天看了c题的合并检测,先把题目放出来:【问题描述】 新冠疫情由新冠病毒引起,最近在 A 国蔓延,为了尽快控制疫情,A 国准 备给大量民众进病毒核酸检测。然而,用于检测的试剂盒紧缺。 为了解决这一困难,科学家想了一个办法:合并检测。即将从多个人(k 个)采集的标本放到同一个试剂盒中进行检测。如果结果为阴性,则说明这 k 个人都是阴性,用一个试剂盒完成了 k 个人的检测。如果结果为阳性,则说明 至少有一个人为阳性,需要将这 k 个人的样本全部重新独立检测(从理论上看,原创 2020-07-08 09:24:12 · 7444 阅读 · 13 评论 -
最大子列和问题
算法题描述:给定N个整数的序列,A1,A2,…,an,求函数f(i,j)=max(0,∑k=ijA k \sum_{k=i}^{j}A~k~∑k=ijA k )的最大值。其实题意很简单,就是找出一段序列中和最大的值,由此我们可以写出代码:int getSum(int a[],int n)//引入序列a和整数个数n{ int i,j,sum,maxn; maxn=0;//初始化最大值为0 for(i = 0;i < n;i++)//原创 2020-07-07 10:00:49 · 206 阅读 · 0 评论 -
矩阵快速幂算法详细解析
在上一篇博客我谈到了大数的快速幂,而相对于矩阵的指数运算同样可以有方法,在此之前我们来看看矩阵的乘法:矩阵的乘法是需要矩阵A的行数与矩阵B的列数相等的(A*B的前提条件)但矩阵快速幂一般只用到方阵(行数和列数相等的情况),从而避免了前提条件。如:[A11A12⋯A1nA21A22⋯A2n⋮⋮⋱⋮An1An2⋯Ann][B11B12⋯B1nB21B22⋯B2n⋮⋮⋱⋮Bn1An2⋯Ann]=[C11C12⋯C1nC21C22⋯C2n⋮⋮⋱⋮Cn1Cn2⋯Cnn]\begin{matrix}\\\原创 2020-06-01 23:19:14 · 6676 阅读 · 3 评论 -
整数快速幂以及大数取模快速幂运算
最近写到快速幂的算法题,就比如313,按照之前的做法无非不是写个循环模拟计算,对于指数较小的情况的确可以完成,倘若指数过于大,程序会超时,此时就需要运用到快速幂的方法:正常情况下的计算时间复杂程度为O(n),a^n=a * a * a…* a(n个a)但a和n过于大时我们可以换种思路,我们知道a^n * a^m = a^(m+n),而我们所用的快速幂的方法就是按指数的二进制来划分新的任务。用313作为例子,13 = (1101)2,我们同时也不难发现313 = 3(1101)2 = 38 * 3原创 2020-05-28 22:43:09 · 1407 阅读 · 0 评论 -
求循环小数的循环节C/C++
面对1/n这样的运算,有时候会出现无限循环即给定一个数n,输出1/n的结果,若是循环小数,则只输出第一个循环节。例如:输入 n 3输出 0.3直接上代码讲解:#include <algorithm>#include <iostream>using namespace std;int a[100005];//此数组我们从下标1开始int n;void get(int n){ int length = 1;//先取下标1记录 a[1原创 2020-05-24 21:53:17 · 4355 阅读 · 1 评论