- 博客(15)
- 收藏
- 关注
原创 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
566
原创 状态压缩与位运算入门
引子 某类问题包含很多的信息,每一个信息都需要一个数组来存储。 例如:有一道题是关于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
1118
原创 2.16 T2题解
Q: 题2 饥荒 【问题描述】 Lzh实在是太饿了。他打算在接下来的n天中自己做菜。每天做一道菜。他能做各种各样的不同的菜。他事先就知道做各道菜的花费以及各道菜对他的好处值。但如果Lzh连续两天做同一道菜,那么第二天得到的该到菜的好处值将是第一天的得到的该道菜的好处值的一半。如果一道菜连续做i(i >= 3)天,那么从第三天开始一直到第i天,Lzh每天从该道菜上得到的好处值将为0。 打个比...
2020-02-16 17:48:10
638
2
原创 几种排序
(图片来自网络) 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
208
原创 质数|约数笔记
用筛法求素数的基本原理,是把从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
226
原创 分数 模板
实数即使用double定义也会损失一定精度,在精度要求很高时,就需要用到分数 0.最大公约数&最小公倍数 #define LL long long LL 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
235
原创 最大公约数&最小公倍数
辗转相除法求最大公约数是一种常用的求两个数的最大公约数的方法。方法是:以小数除大数,如果能整除,那么小数就是所求的最大公约数。否则就用余数来除除数;再用新除法的余数去除刚才的余数。依此类推,直到一个除法能够整除,这时作为除数的数就是所求的最大公约数。 最大公约数 代码实现非常简单 #define LL long long LL gcd(LL a,LL b) //最大公约数 { if(b==...
2020-02-06 13:50:32
883
原创 分治算法
分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。即一种分目标完成程序算法,简单问题可用二分法完成。 分治算法适用的问题需满足以下性质 1)小规模的问题比大规模的问题更好解决 2)大问题可以分解成若干个小问题,且这些小问题互不干扰 3)最优子结构 4)几个小问题的解可以合并成大问题的解 步骤 1)分解:...
2020-02-03 14:34:30
217
原创 树状数组
树状数组(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
261
原创 替罪羊树 模板
替罪羊树是计算机科学中,一种基于部分重建的自平衡二叉搜索树。 在替罪羊树上,插入或删除节点的平摊最坏时间复杂度是O(log n),搜索节点的最坏时间复杂度是O(log n)。 替罪羊树的主要思想就是将不平衡的树压成一个序列,然后暴力重构成一颗平衡的树。 在非平衡的二叉搜索树中,每次操作以后检查操作路径,找到最高的不平衡的结点,重建整个子树。 这里的平衡指的是: 对于某个 0.5<=alp...
2020-01-30 14:54:59
251
原创 快速幂
快速幂顾名思义,就是快速算某个数的多少次幂。其时间复杂度为O(log₂N),与朴素的O(N)相比效率有了极大的提高。 其核心思想就是 如果kkk是偶数 那么 x ^ k = ( x ^ 2 ) ^ (k / 2 ) 如果kkk是奇数 那么 x ^ k = x * ( x ^ ( k - 1 ) ) 递归实现即可 #define LL long long LL quickpow(LL x,LL...
2020-01-27 19:27:44
225
原创 Treap 模板
树堆,在数据结构中也称Treap,是指有一个随机附加域满足堆的性质的二叉搜索树,其结构相当于以随机数据插入的二叉搜索树。其基本操作的期望时间复杂度为O(logn)。相对于其他的平衡二叉搜索树,Treap的特点是实现简单,且能基本实现随机平衡的结构。 采用结构体存储节点 struct node { int lc,rc; int pri;//rand(); int key; int siz...
2020-01-25 22:56:43
284
原创 矩阵乘法
矩阵乘法(英语:matrix multiplication)是一种根据两个矩阵得到第三个矩阵的二元运算,第三个矩阵即前两者的乘积,称为矩阵积。 它只有在第一个矩阵的列数(column)和第二个矩阵的行数(row)相同时才有意义。 矩阵乘法满足结合律,不满足交换律; 一般采用结构体存储矩阵 const int N=4; struct matrix { int n,m; LL g[N][N...
2020-01-25 10:35:30
2943
原创 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
443
原创 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
262
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅