- 博客(31)
- 收藏
- 关注
原创 【C/C++】队列(queue)、优先队列(priority_queue)、双向队列(deque)
队列(queue)【头文件】#include <queue>【声明定义对象】queue<int> que;queue<string> que;queue<node> que;【使用操作】que.front()返回 queue 中第一个元素的引用。如果 queue 是常量,就返回一个常引用;如果 queue 为空,返回值是未定义的。que.back()返回 queue 中最后一个元素的引用。如果 queue 是常量,就返回一个常引用;如果
2022-03-03 15:41:32
1006
原创 【C/C++】数字(int / long / long long)与字符串(string)之间的转换
[数字] 转换 “字符串”(int -> string)【头文件】#include <string>注意这个是string,不是cstring从C++11开始引入【函数名】to_string()std::to_string(int)std::to_string(long)std::to_string(long long)std::to_string(float)std::to_string(double)std::to_string(long double)
2022-03-03 15:03:50
9287
原创 【C/C++】约瑟夫环问题(递归+数学+迭代优化空间)
问题引入: 约瑟夫环问题是个著名的问题:n个人围成一圈,第一个人从1开始报数,报m的将被杀掉,下一个人接着从1开始报。如此反复,最后剩下一个,求最后的胜利者。首先给出公式后面进行解释递推公式f(n, m)表示,n个人报数,每报到m时杀掉那个人,返回最终胜利者的编号。核心思路因为我们知道最后剩下一个人的情况时胜利者的下标是0,也就是我们已知胜利者最后的位置,逆推到最初的时候胜利者所在的位置:关注胜利者的下标位置是怎么变的每杀掉一个人,其实就是把这个数组向前移动了m位为什么是向前移动
2022-03-01 16:29:20
964
原创 【C/C++】树状数组总结和扩展(单点修改,区间查询)
视频讲解:B站视频链接【时间复杂度】单点修改:O(logn)区间查询:O(logn)n次操作总复杂度为:O(nlogn)【前置知识 — lowbit()运算】int lowbit(int x){ return x & (-x);}lowbit(n)运算表示求n在二进制表示下最低位1及其后面的0所构成的数值。lowbit(44) = lowbit((101100)₂) = (100)₂ = 4101100 按位取反得:010011 再加1得:010100将 101100 与
2022-02-28 19:11:47
318
原创 【C/C++】memset()和fill()函数
memset()函数【头文件】C语言中为:#include <memory.h> 或 #include <string.h>C++中为:#include <cstring>【使用方法】memset函数的作用是:按照字节填充某字符memset效率比for循环赋值和fill赋值要快一些将int数组初始化为0:int a[10005];memset(a, 0, sizeof(a));将int数组初始化为-1:int a[10005];memset
2022-02-24 21:34:17
1025
原创 【C/C++】结构体内重载(优先队列或sort()函数对结构体里的元素进行结构体排序)
结构体内重载定义【代码模板】struct node{ int u, v; friend bool operator < (node a , node b){ if(a.u == b.u) return a.v > b.v; return a.u > b.u; //优先队列中的排序大小与结构体里重载的符号相反 //sort()函数中的排序大小与结构体里重载的符
2022-02-24 17:41:23
938
原创 【C/C++】二分查找算法模板总结(适用于大多数情况)
二分查找算法模板【二分条件】条件: 单调、有序时间复杂度: O(logn)【伪代码模板】l = -1, r = n //注意l和r一开始要在区间外 也就是二分区间为[0, n-1]while(l + 1 != r){ m = (l + r)>>1; //m∈[0, n) if(check()){ l = m; } else{ r = m; } return l or r; //根据实际情况选择返回l或者r}【注意细节】为什么l和r一开始要在区间外面?
2022-02-24 16:42:45
843
原创 【C/C++】最大公约数(GCD)和最小公倍数(LCM)
最大公约数(Greatest Common Divisor)【目的】计算两个非负整数a,b的最大公约数例如:12 和 8 的最大公约数为 4【代码模板】int GCD(int a, int b){ return b == 0 ? a : GCD(b, a % b);}【相关原理】欧几里得算法、辗转相除法、更相减损术。欧几里得算法 又称 辗转相除法,而 辗转相除法 是 更相减损术 的 优化计算公式gcd(a, b) = gcd(b, a % b)【思路】假设有两个数161和
2022-02-24 15:32:30
1312
原创 [洛谷 | 字符串、贪心]P1106 删数问题
题目描述键盘输入一个高精度的正整数NN(不超过250250位),去掉其中任意kk个数字后剩下的数字按原左右次序将组成一个新的非负整数。编程对给定的NN和kk,寻找一种方案使得剩下的数字组成的新数最小。输入格式nn(高精度的正整数 )。kk(需要删除的数字个数 )。输出格式最后剩下的最小数。输入输出样例输入 #1175438 4输出 #113注意:如果是直接删掉最大的数字,很容易便可举出反例:1529 1如果直接删最大的9,结果为1...
2021-03-05 17:06:49
434
2
原创 [算法]Manacher(马拉车)求最长回文串
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;char s[11000002];char s_new[21000002];//存添加字符后的字符串 int p[21000002];int Ini...
2020-02-12 21:30:52
136
原创 tarjan算法(tarjan求强连通分量+割点+割边)
tarjan求强连通分量:void tarjan(int now){ dfn[now]=low[now]=++cnt; //初始化 stack[++t]=now; //入栈操作 v[now]=1; //v[]代表该点是否已入栈 for(int i=f[now];i!=-1;i=e[i].next) //邻接表存图 ...
2020-02-01 21:27:53
147
原创 最长公共子序列(LCS)
数学表达式描述:dp表格:单求长度时候:#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int N = 1000;char a[N],b[N];int dp[N][N];int main(){ int lena,lenb,i,j;...
2020-01-22 15:33:47
100
原创 Java大整数
Java大整数导入包模块import java.util.*; //全部import java.math.*; //全部import java.util.Scanner; //输入import java.math.BigInteger; //大整数输入模块import java.util.Scanner; //导入输入的包Scanner cin = new Scanner(Sy...
2019-12-10 17:46:07
178
原创 最短路(dij堆优化)
struct edge{ int to, cost;//若u到v有条边,边权为w,则u.to -> v, u.cost -> w};vector<edge> G[maxn];int d[maxn];int n, m;void dij(int s){ priority_queue<PII, vector<PII>, greater<PII...
2019-11-19 17:13:24
416
原创 分解质因子
vector<int> p;//处理好的p数组存放递增的质数int temp = x;//对x进行分解质因子for(int j = 0; p[j] * p[j] <= temp; j++){ if(temp % p[j] != 0) continue;//如果除不尽就直接下一个质数 int cnt = 0;//记录这个质数 while(temp % p[j] == 0)...
2019-11-02 16:26:18
92
原创 Codeforces Round #596 Div. 2 C. p-binary
题目连接:C. p-binary思路:n = (2^x1 + p) + (2^x2 + p ) + …转换一下把右边的所有p移到左边:n - p * cnt = 2^x1 + 2^x2 + 2^x3;枚举cnt,从1开始,边界是 (n - p * cnt) > 0,因为右边 > 0;设 x = n - cnt * p;计算 x 的二进制下有几个1,如果1的个数 <...
2019-10-27 15:07:04
185
原创 lower_bound( )和upper_bound( )的常见用法
lower_bound( )和upper_bound( )都是利用二分查找的方法在一个排好序的数组中进行查找的。时间复杂度:O(logn)在从小到大的排序数组中:lower_bound(begin, end, num):从数组的begin位置到end-1位置二分查找第一个大于或等于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字...
2019-10-08 15:21:48
573
原创 最小生成树模板
struct node{ int u, v, w; friend bool operator < (node a, node b){ return a.w > b.w; //在优先队列符号相反 //在sort里面符号一致 // '<' 在优先队列里面是大顶堆,大的在最上面 // '<' 在数组sort的时候小的在最前面 }}edge[maxn]...
2019-10-05 16:00:16
90
原创 离散化模板
#include<algorithm> // 头文件 //n 原数组大小 num 原数组中的元素 lsh 离散化的数组 cnt 离散化后的数组大小 int lsh[MAXN] , cnt , num[MAXN] , n;for(int i=1; i<=n; i++) { scanf("%d",&num[i]); lsh[i] = num[i]; }sort...
2019-09-08 11:25:30
96
原创 字典树模板
字典树模板//对于字符串比较多的要统计个数的,map被卡的情况下,直接用字典树//很多题都是要用到节点下标来表示某个字符串const int maxn =2e6+5;//如果是64MB可以开到2e6+5,尽量开大int tree[maxn][30];//tree[i][j]表示节点i的第j个儿子的节点编号bool flagg[maxn];//表示以该节点结尾是一个单词int tot...
2019-08-06 20:19:11
104
原创 Codeforces 1198A - MP3 尺取法
题意:给了n(1≤n≤4e5)个数值,如果这n个数种类为K,那么要k=[log2K](向下取整)去存每个数值,也就是总共要nk的大小去存这n个数值。现在有I byte(1≤I≤1e8)(1byte=8bits)的存储空间,转化为相同单位是8I bit。如果存放不了这些数值,可以采取一种特别的方式解决,选取两个整数l,r。如果数值比l小的,都被转化为l,数值比r大的,都会转化为r。从而转...
2019-08-06 16:42:21
234
原创 最大公因数、最小公倍数
int GCD(int x, int y){ return y == 0 ? x : GCD(y, x % y);}int LCM(int x, int y){ return x * y / GCD(x, y);}
2019-07-25 20:14:06
107
原创 树状数组
int n;int a[1005],c[1005]; //对应原数组和树状数组//因为调用函数也需要时间这里为了省去调用时间,减少时间复杂度。/*int lowbit(int x){ return x & (-x);}*/void updata(int i, int k){ //在i位置加上k while(i <= n) {//可以改...
2019-07-11 20:51:27
97
原创 并查集模板
并查集int father[maxn]; //记录父亲节点的数组int find(int x){//找到x的根节点(父亲节点) return father[x] == x ? x : father[x] = find(father[x]); //判断x的父亲是否为x,是就返回x,不是就继续找x父亲的父亲 //father[x] = find(father[x]) 注意路径压缩...
2019-07-11 10:21:52
128
原创 线段树简化
#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#include<cmath>#include<iostream>#include<string>using namespace std;const int M...
2019-07-10 11:43:45
87
原创 #include <map>
#include <map>#include <map> #include <string> #include <iostream>using namespace std; int main() { map<int, string> mapStudent; mapStudent[1] = "studen...
2019-05-11 19:21:04
352
原创 #include <climits>
#include<climits>头文件定义的符号常量INT_MAX int 最大值INT_MIN int 最小值LONG_MAX long最大值LONG_MIN long最小值CHAR_MIN char的最小值SCHAR_MAX signed char 最大值SCHAR_MIN ...
2019-05-11 19:10:28
1043
原创 快速读入&输出模板
快速读入&输出模板inline int read(){ char ch = getchar(); int x = 0, f = 1; while(ch < '0' || ch > '9'){ if(ch == '-') f = -1; ch = getchar(); } while('0' <= ch && ch <= '9'...
2019-05-11 18:58:51
3444
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人