![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
m0_50498666
这个作者很懒,什么都没留下…
展开
-
快速幂
快速幂简单来说就是用一种算法很快求出a^b的结果 #include <bits/stdc++.h> using namespace std; long long a,b; int main() { cin>>a>>b; long long ans=1; while(b) { if(b&1) { ans*=a; } b>>=1; a*=a; } cout<<ans; return 0; } ...原创 2021-04-04 17:04:19 · 92 阅读 · 0 评论 -
数据结构堆的基本操作实现
堆 其实就是一棵完全二叉树(见下图)在数组中的实现 堆分为大根堆和小根堆 大根堆:1.根节点最大 2.子节点必须大于等于父节点 小跟堆:1.根节点最小 2.子节点必须小于等于父节点 在数组中存储这种结构时,总是习惯将根节点存储在数组下标为1的位置 每一个下标为k的节点的父节点的下标就是k/2 每一个下标为k的节点的子节点的下标就是k2和k2+1 在对堆进行操作(插入或删除了一个元素)的时候,有时会打破堆的有序性,使得子节点和父节点之间的有序性被打破,这时候就需要重新恢复堆的有序性。 恢复堆的有序性需要原创 2020-12-20 12:40:09 · 369 阅读 · 1 评论 -
快速排序
标准快速排序 #include<bits/stdc++.h> using namespace std; int a[100002]; void exch(int i,int j) { int t =a[i]; a[i]=a[j]; a[j]=t; } void sort(int lo,int hi) { if(lo>=hi)return; int t=a[lo]; int i=lo,j=hi+1; while(1) { while(a[++i]<t)if(i==h原创 2020-12-19 21:29:26 · 102 阅读 · 1 评论 -
01背包问题
背包问题 问题描述: 有n个重量和价值分别为wi,vi的背包。从这些背包中挑选出总重量不超过W的背包,求所有挑选方案中价值总和的最大值 输入 不妨先从最原始的方法来考虑,从第一个背包开始,选这个背包是一种情况。不选这个背包是一种情况,然后又从这两种情况继续往下分,选第二个背包或者不选,依次往下,直到最后一个背包。这样每一种情况最后都会得到一个值,找到这些值中间的最大的那个,就是题目中所求的。 采用递归的方法实现上述算法 #include<bits/stdc++.h> using namespa原创 2020-11-03 13:04:48 · 1071 阅读 · 1 评论 -
C++大数高精度基础(加减乘除)
#include<bits/stdc++.h> using namespace std; void moveFrontZero(string&a)//去除一个字符串的前导0 { a.erase(0,a.find_first_not_of('0')); if(a.empty())a="0"; } //让两个字符串变成相同的长度,长度小的补0 void align(string&a,string&b) { int a_size=a.size(); int b_size原创 2020-10-22 12:41:07 · 263 阅读 · 0 评论