自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Git Merge与Git Rebase区别

以一个具体的例子解释git merge和git rebase的用法和区别

2023-09-22 18:22:30 56

原创 Ubuntu Server 22.04 家用k8s集群搭建

家用k8s集群搭建流程

2023-08-03 18:42:00 144

原创 二分图最大匹配(匈牙利算法)

复杂度O(NM)#include <iostream>#include <vector>#include <cstring>using namespace std;const int N = 505;int n1, n2, m, match[N];bool st[N];vector<int> G[N];bool find(int x) { for (int i = 0; i < (int)G[x].size(); i++

2020-07-31 21:42:53 365

原创 欧拉函数

定义:1-N中与N互质的数的个数被称为欧拉函数,即为phi(n)求欧拉函数主要由两类问题:求单个数的欧拉函数O(sqrt(n))求1-N的欧拉函数O(n)对于第一类问题,我们可以使用分解质因数的方法来求,这个可以用容斥原理很容易证明。int phi(int n) { int ans = n; for (int i = 2; i <= n / i; i++) { if (n % i == 0) ans = ans / i * (i - 1); while (n % i == 0

2020-07-25 21:20:28 219

原创 逆元的求法

逆元(数论倒数)定义:如果ax≡1 (mod p),且gcd(a,p)=1(a与p互质,不互质的话x肯定不存在),则称a关于模p的乘法逆元为x,记为a^-1。(逆元不唯一)逆元的作用:a/b ≡ a * inv(b) (mod p)证明:a/b ≡ (a/b) * 1 ≡ (a/b) * (b * inv(b)) (模运算对加减乘可交换,对除不可交换)≡ a * inv(b) (mod p)提到逆元就不得不提及取模运算和同余式的相关性质:取模运算只能是整数,比如要求(3/4)% p应理解为3 *

2020-07-22 16:13:53 5429 1

原创 质数相关算法

质数定义:若一个大于2的自然数,只有1和它本身两个因子,则这个数为素数。质数判定:试除法。bool check(int n) { if (n < 2) return false; for (int i = 2; i <= n / i; i++) if (n % i == 0) return false; return true;}质数定理:1 - n中有大约有 n / lnn 个质数调和级数:1 + 1/2 + 1/3 + … + 1/n = lnn + C(常数)

2020-07-21 10:38:32 752

原创 扩展欧几里得算法

裴蜀定理:设(a,b) = d,,对于任意的整数x, y,ax + by都一定是d的倍数。特别地,一定存在整数x, y(不一定唯一),使ax + by = d成立。另外,若a不等于b,则d为a和b的线性组合所能表示的最小整数。**扩展欧几里得算法:**用于解决如何求出裴蜀定理中的x, y。对于两个整数a, b,我们都知道欧几里得算法可以用来求这两个数的最大公约数,扩展欧几里得可以在求得最大公约数的同时将系数x, y也求得,这也就是其称为扩展欧几里得算法的原因。...

2020-07-19 20:47:53 148

原创 树状数组

树状数组基本用来维护前缀和,相比于数组(查询O(n),修改O(1)),前缀和数组(查询O(1),修改O(n)),其可以做到查询和修改均为logn,因此对于多组查询和修改复杂度为mlongn,远远快于前两者mn的复杂度。其基本思想在于一个数可以唯一进行2进制分解,我要求1 - n这n个数的和,设n = 2^ (i1) + 2 ^ (i2) + … + 2 ^ (ik),其中i1 < i2 < … < ik。我只要维护长度为2 ^ (i1)区间的和,长度为2 ^ (i2)区间的和…最终这些区

2020-07-11 16:49:12 98

原创 G - Game Design题解

题目链接题目大意:一个球,从某一个位置开始滚动,当遇到木块时可以改变方向(上下左右),目标是滚动到(0,0),现给出一个解序列,要求构造一个匹配该解序列的迷宫。题目分析:此题设计较为巧妙,一开始感觉毫无头绪,构造迷宫主要要注意两点:1是保证球的滚动不会被之前设的木块所阻挡,2是保证球不会提前滚入(0,0)。我们可以采用一种比较巧妙的方法来构造迷宫,我们使球每次滚动到一个一个离原点逐渐远的框中,框与框的间隔为1个单位,这样,木块恰好被放到框与框之间的缝隙中,这也就保证了第一点。不过要注意如果相邻两个是L

2020-07-10 22:26:49 599

原创 B - Brexit Negotiations题解

题目链接题目大意:给出n个会议,每个会议都有一定时间,并且依赖于之前的会议(即必须在它依赖的会议进行完之后它才能进行),每次会议都需要对之前完成的每个会议画一分钟总结,求最长会议最短时间是多少。题目分析:对于依赖关系,首先想到拓扑排序,由于题目要最长的会议最短,那么应该先进行长的会议。此题如果正向建图的话会有因为先选了第一层一个较大的节点而导致最大的那个节点被安排到后面的情况。反向建图的话,我们每次选能选的最短的会议,那么较长的会议就不会因为贪心的策略而被先取了。就像正向建图无法保证最大的最先被取一样,

2020-07-10 22:00:17 628

原创 L - Lottery Tickets题解

题目链接题目大意:给出0-9每个数的个数,用这些数(不一定全用上)组成一个能被4整除的最大的数题目分析:枚举最后两位,对选择优先级排个序,然后逐一判断,简单暴力。代码:#include <iostream>#include <cstdio>#include <cmath>#include <algorithm>//00 20 12 32 40//24 44 52 60 16 36 //64 56 72 76 80 //28 84 6

2020-07-10 21:47:41 260

原创 D - Disaster Recovery Gym - 102623D题解

题目链接题目大意:给出m条边,每条边的权值为两个节点编号对应斐波那契数列的值的和,求一个最小生成树,使得最大度数的节点的度数最小。题目分析:此题斐波那契数列作为边权,有很好的性质,首先任意两个斐波那契的和是唯一的,反证假如存在f[a] + f[b] = f[c] + f[d],不放设a < c < d < b,由于f[b] = f[b- 1] + f[b - 2],那么f[c] + f[d] <= f[b],由于f[a] > 0,所以等式不成立,所以结论得证。所以可以得到每

2020-07-10 21:40:52 161

原创 A - Archmage Gym - 102623A题解

题目链接题目大意:一个法师,有能量上限n,每回合可以花费x(如果有大于x的能量)的能量召唤一个水元素,每回合结束都会补充y的能量,但是最多就补到上限n,现在给出回合数,求他最多能召唤出多少水元素(一开始能量为n)题目分析:很容易看出贪心策略,即每回合如果能召唤水元素就召唤。但是如果单纯模拟会超时,所以要找到O(1)的解法。如果y大于等于x,那么每回合都可以召唤出水元素,答案就是回合数否则,题目中有个很好的性质n > x + y,如果当前回合可以召唤水元素,那么我花费x召唤水元素,再补充y的能量

2020-07-10 21:31:08 246

原创 F - Magic Wand Gym - 102566F题解

题目链接题目大意:给出一个序列,每次可以对连续的一段排序,花费序列长度的三次方,求使整个序列有序的最小花费。题目分析:不难发现一定是两两排序(即两两交换)花费最少,于是题目变为求这个序列的逆序数,使用归并排序来求即可。代码:#include <iostream>#include <cstdio>#include <cstring>using namespace std;typedef long long ll;const int MAX_N = 1e

2020-07-10 21:13:03 172

原创 I - Fast Race Gym - 102566I题解

题目链接题目大意:给出n辆车在一条直线上赛跑,给出起始位置和速度,求最后的排名和最后一次排名变动的时间。题目分析:最后的排名很容易求得,以速度为第一关键字,位置为第二关键字进行排序即可求得。对于最后一次排名变动的时间,有如下结论:对排序后的元素从前到后两两比较更新答案即可。证明:代码:#include <bits/stdc++.h>using namespace std;const int MAX_N = 1e5 + 5;struct node { int id, p, s;

2020-07-10 21:02:24 180

原创 C - Emojis Gym - 102566C题解

题目地址题目大意:给出一个序列,求一个最长不下降序列使得夹在这个序列中间的数最少。例如序列3 5 2 7 4 11 10可以找到两个4长的不下降序列3 5 7 11和3 5 7 10,显然前者夹在这个序列中间的数更少,为2.题目分析:由于题目中N达到1e5,所以求最长不下降子序列要使用nlogn的方法,比较常用的就是贪心加二分法,这个题实际是考对这种方法的理解。我们在使用upper_bound进行求解的时候,用一个pos数组记录一下每个元素在dp数组中的放置记录,有了pos数组的帮助就可以方便求出

2020-07-10 20:44:20 141

原创 离散数学偏序关系

比较重要的就是哈斯图,有了哈斯图理解偏序关系就很容易。哈希图就是在关系图的基础上进行简化,去掉自环和直通路以及方向(默认下到上)做哈斯图关键的就是求“盖住”关系,将Warshall算法改进即可容易的求出盖住关系代码如下://使用方法:在输入完各元素后要按一下contorl + Z再回车一下,之后的输出就是简化之后的关系# include <iostream># include <map># include <cstring>using namespace

2020-05-09 19:43:38 3457 1

原创 传递闭包的计算(Warshall)

O(n^3)的高效闭包算法算法内容:1.做出关系R的矩阵M2.枚举每一列,以这一列对应的元素为中间元素去创造新的关系(一行一行来做,如果当前行对应的元素与列对应的元素有关系,例如aRb,则考虑<b,…>有无关系,若有关系则aR…,具体实现就是M[a][…] |= M[b]…代码实现:# include <iostream># include <map>...

2020-05-02 16:27:33 3344

原创 Running Median题解

题目链接题目大意:给一串数,每当数的个数为奇数时,输出当前这一串数的中位数题目分析:为动态中位数专门发明的对顶堆算法:即创建一个大根堆和一个小根堆,小根堆的堆顶维护当前数列的中位数,如果当前的数比小根堆堆顶大,则插入小根堆中,否则插入大根堆中。在奇数个数时检查一下大根堆和小根堆的大小,操作一下使得小根堆比大根堆大一,然后输出小根堆堆顶即可,最后注意一下输出格式代码如下:# include ...

2020-04-22 11:34:55 219

原创 Palindrome题解

题目链接题目大意:给一个字符串,求这个字符串的最大回文串的长度题目分析:回文串问题是一个经典问题,回文串分为奇数长度的回文串和偶数长度回文串两类,且回文串具有一个中心。回文串判定方法:以奇数为例,假设当前回文串的中心为pos,则长度为2 * len + 1的字符串为回文字符串的充要条件为s[pos - len -> pos - 1] == (s[pos + 1 -> pos + l...

2020-04-22 11:25:48 178

原创 Period题解

题目链接题目大意:给一个字符串,当它的某个前缀具有循环次数大于1的循环节的时候,输出这个前缀的长度和循环次数。题目分析:此题是严格循环,当(i - nex[i]) % i == 0说明是严格循环节,若循环次数大于1,输出i和i / (i - nex[i])即可。代码如下:# include <iostream># include <cstdio># includ...

2020-04-20 18:13:40 210

原创 The xor-longest Path题解

题目链接题目大意:给出一颗树,求树上任意两点之间所有边的权值异或起来最大值是多少。题目分析:很好的一道题,首先对于异或来讲满足交换律和结合律,所以求任意两点的异或和就是任意两个点到根节点的异或和异或起来(中间相同的部分异或相消为0,异或0相当于没异或),dfs求出所有点到根节点的异或和,然后问题就转化为从一个数列中任选两点,异或起来的最大值是多少,字典树问题。注意:这个题有多组测试点,用ve...

2020-04-20 18:04:18 161

原创 Supermarket题解

题目链接题目大意:给出n(n >=0&&n<=10000)个物品,每个物品有一个价值和一个过期时间,每天可以卖一个物品(过期的物品不可卖),求最大利益。题目分析:贪心题,按过期时间排个序,将每个物品插入到小根堆中,考虑在插入某个物品时,先判断堆的大小和这个物品的过期时间,若这个物品的过期时间大于堆的大小,则直接插入...

2020-04-20 17:26:07 247

原创 Phone List题解

题目链接题目分析:字典树的裸题,把每个字符串读入后,插入字典树,在从头到尾便利一遍每个字符串,如果在遍历过程中遇到某个节点是另一个字符串的结尾,(注意做个标记排除自身),则输出“NO”。代码如下:#include<iostream>#include<cstdio>#include<cmath>#include<algorithm>#in...

2020-04-20 16:49:52 389

原创 Milking Grid题解

题目链接题目大意:给出一个字符矩阵,求最小的能覆盖整个字符矩阵的子矩阵的大小。题目分析:即求一个二维的最小循环节(不要求完全循环),KMP算法可以求一维最小循环节,考虑将它改进。由于宽度较小,可以根据最小循环节判断的定理求出每行均满足的循环节的最小长度,即设整个字符串的长度为len的话,那么x为len的循环节的充要条件为s[ 1 -> len - x] = s[x + 1 - >...

2020-04-20 16:23:41 267

原创 Sliding Window题解

题目链接题目大意:给一个长度为n的序列,宽度为k的窗口(一开始在k处),窗口每次滑动1个单位,求每滑动一次窗口中的最大值和最小值。题目分析:单调队列(单调栈增加限制)每插入一个数,先判断是否超出窗口大小(限制),如果超出,则将队头元素出队。再和队尾判断,如果它比队尾元素要小,那么在窗口之后的滑动过程中队尾元素就永远不会作为答案,那么就可以将队尾元素弹出队列。这样得到的队列就是单调递增的,最大...

2020-04-20 12:12:31 173

原创 A City Game题解

A City Game题解题目链接:https://vjudge.net/problem/UVA-1330题目大意:给出一个n*m的矩阵,求这个矩阵中全是F的矩形的最大面积是多少。题目分析:枚举每一行,判断以这一行为矩形的底所能得到的矩形的最大面积为多少,问题就转换为典型的单调栈问题。对每个矩形条而言,若以它的高度为整个矩形的高,那么矩形的宽就为右边第一个高度比它小的矩形的坐标 - 左边第...

2020-04-20 11:43:57 155

空空如也

空空如也

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

TA关注的人

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