自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 收藏
  • 关注

原创 康托展开和逆康托展开

康托展开康托展开是一个全排列到一个自然数的双射,常用于构建hash表时的空间压缩。设有n个数(1,2,3,4,…,n),可以有组成不同(n!种)的排列组合,康托展开表示的就是在n个不同元素的全排列中, 比当前排列组合小的个数,那么也可以表示当前排列组合在n个不同元素的全排列中的名次(当前的名次 = 比当前排列组合小的个数 + 1)。在(1,2,3,4,5)5个数的排列组合中,计算 34152的康托展开值。根据公式:X = 2 * 4! + 2 * 3! + 0 * 2! + 1 * 1! + 0 *

2022-03-06 15:40:18 100

原创 KMP模板

KMP模板#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int N = 1e5 + 7;int n,m;int nxt[N];char s[N];char p[N];void get_next() //求出next数组{ //next数组是从 S[0到i-1]前子串 的前缀后缀最大值

2022-02-23 15:54:29 261

原创 redis中的脚本(Lua)

将脚本加载到缓存中,并生成sha值SCRIPT LOAD script将脚本 script 添加到脚本缓存中,但并不立即执行这个脚本。EVAL 命令也会将脚本添加到脚本缓存中,但是它会立即对输入的脚本进行求值。如果给定的脚本已经在缓存里面了,那么不做动作。在脚本被加入到缓存之后,通过 EVALSHA 命令,可以使用脚本的 SHA1 校验和来调用这个脚本。脚本可以在缓存中保留无限长的时间,直到执行 SCRIPT FLUSH 为止。返回值:给定 script 的 SHA1 校验和local_r

2020-11-02 22:03:03 425

原创 redis中的Hash

Hash一个hash中有很多个域,每个域都是一个key-value对添加值HSET key field value将哈希表 key 中的域 field 的值设为 value 。如果 key 不存在,一个新的哈希表被创建并进行 HSET 操作。如果域 field 已经存在于哈希表中,旧值将被覆盖。返回值:如果 field 是哈希表中的一个新建域,并且值设置成功,返回 1 。如果哈希表中域 field 已经存在且旧值已被新值覆盖,返回 0 。local_redis:0>hset myh

2020-11-02 21:23:57 105

原创 redis中的list链表

List是一个(Key-Value对),Key代表List名称,value是里面的键值List的索引有两种:一种是0~len - 1,另一种是 -len ~ -1Left、right都可插入元素(Left代表从头部插入,right代表从尾部插入)如果,key不存在,创建链表如果,key存在,链表添加内容如果,链表值全部移除,key也就消失了效率分析链表的头尾元素操作,效率都非常高链表中间元素操作,效率比较低头尾添加值LPUSH key value [value …]将一个或多个值 v

2020-11-02 20:23:37 147

原创 字典树模板

称单词查找树, Trie树,是一种 树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。它有3个基本性质:1 根节点不包含字符,除根节点外每一个节点都只包含一个字符。2 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。3 每个节点的所有子节点包含的字符都不相同。#include <bits/s

2020-10-30 11:43:24 75

原创 KMP & 扩展KMP & Manacher

KMP的理解HDU 3746 题目链接题意现在给你一个字符串, 问你需要再加多少个字符串才可以补齐一个循环(至少两个循环节)思路KMP算法中,求解nex数组就是根据自身与自身匹配进行求解最大公共前后缀先求出整个数组的的最大公共前后缀,len - nex[len]就是最小循环节的长度(可以想一想)#include <bits/stdc++.h>using namespace std;const int N = 1e6 + 5;const int M = 1e4 + 5;co

2020-10-30 10:56:21 79

原创 Manacher算法的个人理解

Manacher算法,又叫“马拉车”,它可以在时间复杂度和空间复杂度都是O(n)的情况下,求出一个字符串的最长回文串长度。算法思路首先回文串分为奇回文串和偶回文串,因为偶回文串是不对称的,比较难处理对于奇偶字符串的处理,manacher采用的是填充特殊字符的方法,将奇偶字符串都变成奇字符串在字符串中间加#,开头加@(‘#’、‘@’一般不会出现,所以使用它们)重定义字符串的长度为2*len+1(@不算)int getstr(){ int k = 0; str[k++] = '@';//

2020-10-28 18:42:12 125

原创 最小最大表示法

用法:一个首位相连的字符串,我们要寻找一个位置,从这个位置向后形成一个新字符串,我们需要使这个字符串字典序最小。算法:有一个字符串str,下标为 0 ~ len我们这里要i = 0,j = 1,k = 0,表示从i开始k长度和从j开始k长度的字符串相同(i,j表示当前判断的位置)(1) 当str[i + k] == str[j + k] 时 k++;(2) 当str[i] > str[j]时,我们发现i位置比j位置上字典序要大,那么不能使用i作为开头了,我们要将i向后移动,移动多少呢?有因

2020-10-27 11:15:26 211

原创 连通图

Tarjan算法求强连通分量Tarjan算法求割点和桥思路/**求割点一个顶点u是割点,当且仅当满足(1)或(2)(1) u为树根,且u有多于一个子树。(2) u不为树根,且满足存在(u,v)为树枝边(或称 父子边,即u为v在搜索树中的父亲),使得 dfn(u)<=low(v)。(也就是说 V 没办法绕过 u 点到达比 u dfn要小的点)注:这里所说的树是指,DFS下的搜索树*/...

2020-10-08 00:34:19 139

原创 快速幂求组合数

ll quick(ll a,ll b){ //计算a^b并且对mod取余 ll ans = 1; while(b){ if(b & 1) ans = ans * a % mod; a = a * a % mod; b >>= 1; } return ans % mod;}ll calc(ll n,ll m){//求组合数 if(m > n) return 0; return (fac[n] .

2020-09-26 21:10:52 202

原创 D. Trash Problem

D. Trash Problem 题目链接题意Vova决定打扫房间。可以将房间表示为坐标轴OX。房间里有n堆垃圾,第i堆的坐标是整数pi。所有桩具有不同的坐标。让我们将总清理定义为以下过程。此过程的目标是在不超过两个不同的x坐标下收集所有桩。为了实现此目标,Vova可以执行几次(可能为零)移动。在移动期间,他可以选择一些x,并使用扫帚将所有堆从x移动到x + 1或x-1。请注意,他无法选择要移动多少个桩。此外,有两种查询类型:0 x-从坐标x移除一堆垃圾。确保此时在坐标x中有一个桩。1 x-将一

2020-09-19 22:58:04 219

原创 并查集

POJ 1182 题目链接题意动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B, B吃C,C吃A。现有N个动物,以1-N编号。每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种。有人用两种说法对这N个动物所构成的食物链关系进行描述:第一种说法是"1 X Y",表示X和Y是同类。第二种说法是"2 X Y",表示X吃Y。此人对N个动物,用上述两种说法,一句接一句地说出K句话,这K句话有的是真的,有的是假的。当一句话满足下列三条之一时,这句话就是假话,否则就是真

2020-09-10 17:28:40 117

原创 生成树计数

生成树计数#include <bits/stdc++.h>using namespace std;typedef long long ll;const int INF = 0x3f3f3f3f;const int N = 55;ll K[N][N];bool g[N][N];ll det(int n) /// 求矩阵K的n-1阶顺序主子式{ ll ans = 1; for (int i = 1; i < n; i++){ /// 枚举主对角线上第

2020-09-07 12:38:38 191

原创 最小树形图

最小树形图HDU 2121 题目连接题意有n个城市,m条有向路径,问是否能够从一个点出发通过所有点,并且总路径最小,如果有就输出总路径和开始点思路建立一个超级源点,超级源点到每个点的距离为所有边权的和再加上一标记与超级源点相连的点就是起点#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#include <algorithm>using

2020-09-06 14:30:05 89

原创 01分数规划

01分数规划POJ 2976 题目链接题意n个题目,给出题目的分数(bi)和你的得分(ai),累加平均值的公式为100∗∑i=1nai/∑i=1nbi100*\sum_{i=1}^{n}{ai} / \sum_{i=1}^{n}{bi}100∗i=1∑n​ai/i=1∑n​bi问你去掉k个题目后,最大的累加平均值为多少思路...

2020-08-28 18:51:02 152

原创 最小生成树

最小生成树算法(无向图)

2020-08-22 13:10:20 133

原创 最大流

HDU 3416 题目链接题意给你一个有向权图,问你从S到E有几条最短路,每条边直走一次的情况下;思路先把所有的最短路经过的边找出来(lowcost[v] = lowcost[u] + e.len)然后将这边边的权值设为1,跑一遍最大流(dinic算法模板)即可#include <bits/stdc++.h>using namespace std;const int INF = 0x3f3f3f3f;const double eps = 1e-8;const int N =

2020-08-20 21:42:34 111

原创 IO优化

int in() { char ch; int a = 0; while((ch = getchar()) == ' ' || ch == '\n'); a += ch - '0'; while((ch = getchar()) != ' ' && ch != '\n') { a *= 10; a += ch - '0'; } return a; }

2020-08-20 16:50:44 95

原创 最短路

POJ 3268 题目链接题意找到n个地点到目的地的往返最短路程中的最大值(单向的路径,所以往返可能不同)思路跑两遍最短路,其中一个道路是原先的道路,另一个中的道路是起点终点互换的道路#include <cstdio>#include <cstring>#include <cmath>#include <iostream>#include <algorithm>using namespace std;const int N

2020-08-16 12:25:18 91

原创 dancing links x(舞蹈链算法)

舞蹈链算法详解

2020-08-10 12:52:57 209

原创 搜索进阶

priority_queue八数码 HDU 1043 题目链接思路利用A*算法 + 康托展开压缩空间康托展开传送门A*算法传送门#include <bits/stdc++.h>using namespace std;const int N = 4e5 + 5;struct node{ int p[4][4]; int x,y; int g,h; int hash_num; bool operator < (const node&a

2020-08-03 13:50:53 249

原创 一般图匹配带花树

UOJ 79 题目链接题意从前一个和谐的班级,所有人都是搞OI的。有 n 个是男生,有 0 个是女生。男生编号分别为 1,…,n。现在老师想把他们分成若干个两人小组写动态仙人掌,一个人负责搬砖另一个人负责吐槽。每个人至多属于一个小组。有若干个这样的条件:第 v 个男生和第 u 个男生愿意组成小组。请问这个班级里最多产生多少个小组?思路一般图最大匹配模板#include <bits/stdc++.h>using namespace std;const int N = 555;

2020-07-28 23:45:32 85

原创 二分图最大权匹配

奔小康赚大钱 HDU - 2255 题目链接题意村里共有n间房间,刚好有n家老百姓,考虑到每家都要有房住(如果有老百姓没房子住的话,容易引起不安定因素),每家必须分配到一间房子且只能得到一间房子。现在这个问题就是村领导怎样分配房子才能使收入最大.DFS O(n^4)写法#include <bits/stdc++.h>using namespace std;const int N = 407;const int INF = 0x3f3f3f3f;int g[N][N];

2020-07-27 15:48:28 159

原创 二分图多重匹配

Jamie’s Contact Groups POJ - 2289 题目链接题意给定朋友们可能属于的组的编号,让你求分成组的最多的联系人最少。思路二分图多重匹配模板题#include <cstring>#include <iostream>#include <string>#include <algorithm>#include <cstdio>#include <vector>using namespace s

2020-06-21 11:19:56 330

原创 二分匹配

棋盘游戏 HDU - 1281 题目链接行与列的二分匹配,暴力删除每一点求最新的二分匹配,比原先的小那就是重要点#include <bits/stdc++.h>using namespace std;const int N = 100 + 5;struct node{ int x,y;}s[N * N];int Map[N][N],vis[N],link[N];int cnt[N];bool dfs(int x,int m){ for (int i = 1;

2020-06-20 21:47:52 200

原创 二分图染色

DFS#include <bits/stdc++.h>using namespace std;const int N = 222;const int INF = 0x3f3f3f3f;typedef long long ll;struct node{ int to,nex;}e[N * N * 2];int head[N],cnt,ans,link[N],vis[N];void add(int u,int v){ e[cnt].to = v; e[cn

2020-06-14 14:26:24 122

原创 基础DP

传送门A - Max Sum Plus Plus( HDU - 1024) A题链接C - Monkey and Banana (HDU - 1069) C题链接n种类型的长方体,可叠成的最大高度(底部的长宽都要大于上一层的)#include <bits/stdc++.h>using namespace std;int dp[111]; // dp[i] 代表放第i个的最大值struct node{ int x,y,z; bool operator <

2020-06-12 09:10:50 277

原创 扫描线

扫描线:离散x坐标,排序y坐标,从下到上扫描每一个点所在的线面积:每次扫描就更新底面的长度 ,每次增加的面积 == 高度差 * 底面长度周长:除了更新地面长度外,还要更新左右端点是否被覆盖,每次增加的周长就是 上下两次底面长度的差值绝对值 + 未被覆盖的左右端点个数乘高度差poj 1177 题目链接hdu 1255 题目链接离散化x坐标,更新区间为左闭右开#include <bits/stdc++.h>using namespace std;const i

2020-06-10 16:04:52 128

原创 链式前向星

顺着增边,倒着遍历head[u] 表示 与u相连的最后一条边的下标(初始值置为-1,表示没有任何一条边)e[cnt].nex 保存上一条边的下标struct node{ int to,len,nex;}e[N * N];int head[N],cnt;void add(int u,int v,int len){ e[cnt].to = v; e[cnt].nex = head[u]; e[cnt].len = len; head[u] = cnt++;

2020-05-30 13:24:57 142

原创 离散化

int main(){ for (int i = 0; i < n; i++){ scanf("%d %d",&l[i],&r[i]); a[cnt++] = l[i]; a[cnt++] = r[i]; } sort(a + 1,a + cnt); int num = 2; for (int i = 2; i < cnt; i++){ if (a[i] != a[i - 1

2020-05-30 10:04:31 214

原创 线段树|树状数组|RMQ

能用树状数组的都能用线段树,但是树状数组写法简单K & (-K) 是用来取最右边的1 (一个数求补,那么最右边的1不会改变)敌兵布阵 (HDU - 1166)题目链接树状数组模板题,单点更新,区间查询#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>#include <string>using namespace std;

2020-05-25 15:16:03 188

原创 二分查找

查找第一个大于等于x的下标int FirstGE_binary(int l,int r,int x,int a[]){ int ans = -1; while(l <= r){ int mid = (l + r) >> 1; if (a[mid] < x) l = mid + 1; else { ...

2020-05-05 11:32:15 113

原创 STL::deque

assign:将新的内容分配给双端队列容器,替换其当前内容,并相应地修改其大小。std::deque<int> first; std::deque<int> second; std::deque<int> third; first.assign (7,100); // 7 ints with a value of 100...

2020-05-04 16:19:16 108

原创 STL::Array

at:返回对数组中位置n处元素的引用。 该函数自动检查n是否在容器中的有效元素范围内,如果不是,则抛出out_of_range异常(即,如果n大于或等于其大小)。这与成员operator []不同,后者不检查边界。std::array<int,10> myarray; // assign some values: for (int i=0; i<10; i++) m...

2020-05-03 22:10:00 289

原创 DOS命令行编译运行java代码

首先我们用记事本写出一个Hello World 代码,然后保存成后缀名为.java的文件放到容易找到的文件夹中然后我们打开DOS命令行,找到D:\notepad这个目录下,输入javac one.java编译该java代码,就会生成一个java.class文件然后输入java one(因为我的class名字为one,所以会生成一个该java.class文件名为one)运行即可要注意的是当...

2019-06-20 14:54:53 963

原创 优美数

题目描述时间限制:1秒如果一个数中只有少于三个数字是非零的,那么我们称这个数为优美数,我们定义这个优美数的优美程度为这个数所有数字相加的和。 例如优美数有4,200000,10203,其中4的优美度是4,200000的优美度是2,10203的优美度是6. 数字4231,102306,7277420000,就不是啰。现在问在【L,R】中,有多少个优美度为x的优美数。输入输出格式输入格式:...

2019-06-17 01:14:43 489

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除