c++
GBLoi
这个作者很懒,什么都没留下…
展开
-
20200315t模拟赛 解题报告
题目名称 幸运数 TOF函数 最短折叠存盘文件名 lucky.cpp tof.cpp cuttle.cpp输入文件名 lucky.in tof.in cuttle.in输出文件名 lucky.out tof.out cuttle.out时限 1s 1s 1s内存限制 128M 128M 128M【注意事项】: 请独立完成题目。T1 幸运数题目描述如果一个数能被31...原创 2020-03-18 10:19:05 · 464 阅读 · 0 评论 -
状态压缩与位运算入门
引子某类问题包含很多的信息,每一个信息都需要一个数组来存储。例如:有一道题是关于n扇门的状态的问题,有5个门,1代表开,0代表关。那么用数组描述a[1]—a[5]:分别为0 1 1 0 1 就代表 关 开 开 关 开,如果n是一个很大的数10^8,数组往往开的太大了!所以呢,为了避免空间开太大,也为了方便程序描述状态,可以把这个状态压缩成一个十进制的数字13来代替,因为(13)=01101...原创 2020-02-28 17:13:17 · 878 阅读 · 0 评论 -
Dijkstra
Dijkstra 模板时间复杂度O((n+m)logn)#include<bits/stdc++.h>using namespace std;priority_queue< pair<int,int> > q; //大根堆(优先队列),pair的第二维为节点编号; //pair的第一维为dis的相反数,利用相反数变成小根堆; //默认对p...原创 2020-01-21 09:35:36 · 206 阅读 · 0 评论 -
SPFA 模板
SPFA模板SPFA 算法是 Bellman-Ford算法 的队列优化算法的别称,通常用于求含负权边的单源最短路径,以及判负权环。SPFA最坏情况下复杂度和朴素 Bellman-Ford 相同,为 O(VE)。一般时间复杂度为O(ke) k是2左右的常数。spfa具有灵活性强的优点bfs版void SPFA(){ memset(dis,127,sizeof(dis)); m...原创 2020-01-21 09:58:41 · 351 阅读 · 0 评论 -
快速幂
快速幂顾名思义,就是快速算某个数的多少次幂。其时间复杂度为O(log₂N),与朴素的O(N)相比效率有了极大的提高。其核心思想就是如果kkk是偶数 那么 x ^ k = ( x ^ 2 ) ^ (k / 2 )如果kkk是奇数 那么 x ^ k = x * ( x ^ ( k - 1 ) )递归实现即可#define LL long longLL quickpow(LL x,LL...原创 2020-01-27 19:27:44 · 169 阅读 · 0 评论 -
矩阵乘法
矩阵乘法(英语:matrix multiplication)是一种根据两个矩阵得到第三个矩阵的二元运算,第三个矩阵即前两者的乘积,称为矩阵积。它只有在第一个矩阵的列数(column)和第二个矩阵的行数(row)相同时才有意义。矩阵乘法满足结合律,不满足交换律;一般采用结构体存储矩阵const int N=4;struct matrix{ int n,m; LL g[N][N...原创 2020-01-25 10:35:30 · 2418 阅读 · 0 评论 -
几种排序
(图片来自网络)1.选择排序时间复杂度:O(n2)空间复杂度:O(1)稳定性:不稳定最容易想到的一种排序每次选出最值放到数组前端Code://可以直接写在主程序里for(i=1;i<=n;i++) { Min=INF; p=0; for(j=i;j<=n;j++) { if(a[j]<Min) { Min=a[j]; p=j; }...原创 2020-02-09 13:36:55 · 126 阅读 · 0 评论 -
质数|约数笔记
用筛法求素数的基本原理,是把从1开始的某一范围内的正整数从小到大顺序排列,逐步筛掉非素数留下素数。1.朴素筛法时间复杂度O(n3/2)O(n^3/2^)O(n3/2)很容易想到从1枚举到n,挨个判断是不是素数;Code:bool ifprime(LL x){ int i,j; for(i=2;i*i<=x;i++) if(x%i==0) return f...原创 2020-02-08 13:56:48 · 163 阅读 · 0 评论 -
分数 模板
实数即使用double定义也会损失一定精度,在精度要求很高时,就需要用到分数0.最大公约数&最小公倍数#define LL long longLL gcd(LL a,LL b) //最大公约数 { if(b==0) return a; return gcd(b,a%b);}LL lcm(LL a,LL b) //最小公倍数 { return a*b/gcd(a...原创 2020-02-06 14:27:39 · 174 阅读 · 0 评论 -
最大公约数&最小公倍数
辗转相除法求最大公约数是一种常用的求两个数的最大公约数的方法。方法是:以小数除大数,如果能整除,那么小数就是所求的最大公约数。否则就用余数来除除数;再用新除法的余数去除刚才的余数。依此类推,直到一个除法能够整除,这时作为除数的数就是所求的最大公约数。最大公约数代码实现非常简单#define LL long longLL gcd(LL a,LL b) //最大公约数 { if(b==...原创 2020-02-06 13:50:32 · 784 阅读 · 0 评论 -
分治算法
分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。即一种分目标完成程序算法,简单问题可用二分法完成。分治算法适用的问题需满足以下性质1)小规模的问题比大规模的问题更好解决2)大问题可以分解成若干个小问题,且这些小问题互不干扰3)最优子结构4)几个小问题的解可以合并成大问题的解步骤1)分解:...原创 2020-02-03 14:34:30 · 143 阅读 · 0 评论 -
树状数组
树状数组(Binary Indexed Tree(B.I.T), FenwickTree)是一个查询和修改复杂度都为log(n)的数据结构。可以实现单点(区间)修改和区间查询该结构满足以下性质1)每个节点c[x]保存以它为根的子树中所有叶节点的和。2)c[x]的子节点个数==lowbit(x)的位数3)x的父亲节点是x+lowbit(x)。lowbit()表示取出二进制最低位的1...原创 2020-02-02 14:45:02 · 204 阅读 · 0 评论