自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 蓝桥杯系列 - 2019国赛 - 矩阵计数

矩阵的每个位置只有两种可能的状态,加上 N, M 的范围这么小,很容易想到要用到二进制,往这个思路想下去就想到了状压 DP。大致思路如下:输入 N, M,矩阵每行的状态就有 numState = 2M 个。假设 1 代表题中的 ‘X’,0 代表题中的 ‘O’。可以先从 [0, numState - 1] 里面挑出符合条件的数存进一个数组 stateAllowed,所谓“符合条件”就是这些数的二进制表示没有连续 3 个 1,例如 8 = (1000)2 是符合条件的,而 7 = (0111)2 和 1

2021-05-09 10:28:04 1319 1

原创 蓝桥杯系列 - 2018国赛 - 调手表

很明显的动态规划,设置 dp[n],dp[i] 表示调到数字 i 所需的最少步数。这道题的状态转移方程很简单:dp[i] = min(dp[i - 1], dp[(i - k) % n]) + 1不过,这道题难的地方就在于,dp 的初始化比较难想到,有一点比较细。正确的初始化方案如下:// 从 0 位置开始, 逐次往后跳 1 步for i in [0, n - 1]: dp[i] = i// 从 k 位置开始, 逐次往后跳 k 步, 根据数学关系可推导出最多跳 n * k / gcd(n,

2021-05-08 15:57:42 272 1

原创 蓝桥杯系列 - 2018国赛 - 迷宫与陷阱

BFS题,大致遵循以下思路:可以设置一个结构体,包含 4 个成员: x, y, step, state。其中 x, y 表示当前处在迷宫中的位置,step 表示到达该位置时总共用了多少步,state 表示无敌状态剩余的步数,state = 0 表示非无敌状态,state > 0 表示处于无敌状态,每走一步就减 1。设置 vis[n][n] 数组, vis[i][j] 记录迷宫位置 i, j 是否被访问过。假设迷宫用 maze[n][n] 表示,当前位置为 curx, cury,当前步数为 st

2021-05-08 14:55:28 659 1

原创 蓝桥杯系列 - 2018国赛 -版本分支

非常明显的 LCA 问题,可以用倍增算法来解决。一些前期铺垫:我们记节点v到根的深度为depth(v)。那么如果节点w是节点u和节点v的最近公共祖先的话,让u往上走(depth(u)-depth(w))步,让v往上走(depth(v)-depth(w))步,都将走到节点w。因此,我们首先让u和v中较深的一个往上走|depth(u)-depth(v)|步,再一起一步步往上走,直到走到同一个节点,就可以在O(depth(u)+depth(v))的时间内求出LCA。分析刚才的算法,两个节点到达同一节点后,

2021-05-07 15:22:17 252

原创 蓝桥杯系列 - 2017国赛 - 小数第n位

这道题应该不难想到下面这种思路:a * 10n+2 / b % 1000这样可以得出小数点后n ~ n + 2位数字,原理就是将a的小数点往后移动10n+2位。10n+2可以用快速幂算出来。题目中n的范围非常大,最大为109,意味着10n+2最大为1010^9,大数计算很耗时的,这么计算的话严重超时。于是对上述思路进行改进:在进行快速幂计算的时候,每次计算都取模b * 1000。这一原理是:我们只需要保留a * 10n+2中比b大3个数位的数即可,这样就能保证最终a * 10n+2 / b的整数部分

2021-04-30 14:52:03 153

原创 Leetcode87. 扰乱字符串 —— 区间DP

这道题应该是比较明显的区间DP问题了。状态定义:dp[l, i, k] 表示 s1[i~i+l-1] 通过扰乱后能否与 s2[k~k+l-1] 相同(True / False),易知 l 表示字符串 s1 和 s2 的子串的长度。状态初始化:1. dp[0][i][k] = False, for i in [0, length] andfor kin [0, length]""" length 为字符串 s1 和 s2 的长度,dp[0][i][k] 设置为 False 的原因是以 ..

2021-04-16 18:56:19 90

原创 一维、二维差分

本文为学习完两篇有关差分数组的博客后,记录下的学习总结,如果看完本文不太理解,可以移步其他两篇博客:一维差分讲解二维差分讲解一维差分假设原数组表示为 a[0~n],差分数组为 d[0~n+1]。初始化差分数组:① d[0] = a[0] = 0② d[i] = a[i] - a[i - 1], for i in [1, n]③ d[n + 1] = 0 - a[n]可见,一维差分数组记录的是两个相邻数之间的差,即 d[i] 表示 a[i] 与 a[i - 1] 之差。需要

2021-04-16 15:13:09 575

原创 牛客IOI周赛23-普及组 D题 - LIS变形

很容易看出,将原数组从小到大排序,就可以按照LIS的DP套路来解这道题了。但是,一般情况下LIS是O(n^2),用在这道题会被卡。LIS可以优化做到O(nlogn),参照LIS的优化也是有可能解出这道题的,但比赛时一直想不出来。看了他人的题解后才明白的。首先是dp状态的定义:dp[i]: 表示以数字i为结尾的最长好序列的长度。注意,这里是指以i为结尾,而不是以b[i]为结尾(b[0 ~ n - 1]为原数组)。转移方程:dp[i] = max(dp[j]) + 1 for j < i

2021-03-06 19:55:08 112

原创 整数分块知识(转载)

分享一个整数分块的博客:C -求和公式(整除分块)

2021-03-01 19:41:05 134

原创 Python程序的执行过程(转载)

说说Python程序的执行过程

2021-02-26 14:46:46 80

原创 牛客NC13593 一起来数二叉树吧 - 动态规划

dp[i][j]:结点数为i,叶子数为j时二叉树的数量。状态转移方程:令x,y分别表示二叉树的左子树的结点数和叶子数,则二叉树的右子树的结点数和叶子数为i - x - 1,j - y。dp[i][j] = dp[x][y] * dp[i - x - 1][j - y] for 0 <= x < i, 0 <= y <= min(x, j)。其实这个解法会使左右子树对称的二叉树被重复计数,但这道题好像把对称的二叉树看成两个不同的二叉树,所以才可以这么解题。#inc

2021-02-21 10:51:59 140

原创 牛客NC13610 矩阵 - 二维(矩阵)哈希 + 二分

一维哈希可以将字符串映射为一个整数,而二维哈希则可以将矩阵映射为一个整数。令h[i][j]表示左上顶点为(1, 1),右下顶点为(i, j)的矩阵的哈希值,mat[i][j]表示原矩阵。采用如下的方式更新h[i][j]:for(int i = 1; i <= n; ++i) for(int j = 1; j <= m; ++j) h[i][j] = h[i][j - 1] * base1 + mat[i][j];for(int i = 1; i <=

2021-02-21 09:24:00 509

原创 HDU 3068 - 马拉车(manacher)算法模板题

马拉车(manacher)算法可以在O(n)时间内求出最长回文子串或回文子串的个数。马拉车一开始还是比较晦涩难懂的,这里推荐两篇文章,可以帮助了解马拉车算法的思想:漫画:如何找到字符串中的最长回文子串?一文让你彻底明白马拉车算法第一篇使用了漫画讲解,相对第二篇文章更容易理解马拉车算法的思想,但代码实现上不如第二篇简洁。故推荐先阅读第一篇,要实现代码时再参照第二篇。#include<algorithm>#include<cstdio>#include<i

2021-02-19 16:21:14 312

原创 Libre OJ 103 - 用进制哈希法替代KMP

KMP可以用于求一个模式串P在母串T中出现的次数和位置,时间复杂度是O(n + m) (n为P的长度,m为T的长度)。进制哈希法也可以做到在O(n + m)的时间内求出P在T中出现的次数和位置,而且做法非常简单暴力!还未了解进制哈希法的可以阅读下面两篇博客:进制哈希法进制哈希的性质#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>using

2021-02-18 17:29:56 141 1

原创 Libre OJ 2823 - 字符串哈希,进制哈希

使用进制哈希法解决这道题。还未了解进制哈希法的可以阅读这个博客:https://blog.csdn.net/shamansi99/article/details/113843802进制哈希有一个很方便的性质:假设我们选定base为基数,并采用自然溢出法。令h[i]表示子串s[1~i]的哈希值,p[i]表示base的i次方。那么,子串s[l~r]的哈希值可以通过下式求得:h[l~r] = h[r] - h[l - 1] * p[r - l + 1].原因不累述,自己推一下应该很快就

2021-02-18 16:54:36 168

原创 洛谷-P3370 【模板】字符串哈希

推荐两个关于字符串哈希的博客:字符串哈希入门字符串哈希进阶本题可以用进制哈希来解决,这应该也是字符串哈希中很常用的一种哈希方法。进制哈希的核心思想是将字符串转换为一个base进制的整数。首先确定一个base值,作为基;一个mod值,作为模数。再设置一个hash_val值,初始为0,它将记录字符串的最终的哈希值。然后迭代这个字符串,将base乘以hash_val再加上当前字符的整数值,将取余mod后将结果赋给hash_val,继续下一轮迭代。最终的hash_val即为该字符串的

2021-02-18 11:48:53 525 1

原创 分享一个有关C语言条件编译的博客

https://www.cnblogs.com/rusty/archive/2011/03/27/1996806.html

2021-01-25 17:01:43 76

原创 leetcode - problem 71 - 简化路径

很简单,用一个栈就可以完成。先对原字符串按照’/‘分割成列表。此时列表中可能会有空串“”,这是因为原字符串中的’/‘全部都替换成了空串加进列表里面。于是,第二部调用filter()函数过滤掉所有的空串。再迭代整个列表:1. 如果遇到’.’,保持栈中的元素不变,不进行操作;2. 如果遇到"…",弹出栈顶(如果有的话);3. 其他情况都将列表元素压进栈。因为我是用python的列表来表示一个栈stack,因此我这里的栈是一个可迭代的对象。最后简化后的路径就是: ‘/’ + “/”.join(stack)

2021-01-04 16:36:39 92

原创 树状数组求逆序对

求逆序对的思路总结如下:对数据进行离散化处理,设离散化后的数组为a[n].设置数组s[n], s[i]表示数字i在a[n]出现的次数.核心步骤:ans = 0;s[1~n] = 0; //初始化s[n]for i = 1, 2, …, n // 从1遍历到ns[a[i]] += 1; //更新a[i]出现的次数cnt = SUM(s[1~a[i]]); //cnt表示当我们遍历到第i个数时,共有多少个数<=a[i]ans += i - cnt; //当前共有i个数, &lt

2020-11-12 20:22:17 182

原创 route map: 转发一个博客,附上自己的简单理解

最近在做实验需要用到route map,搜到了一个博客感觉挺不错,分享一下:https://blog.csdn.net/ZhangPengFeiToWinner/article/details/85997165附上个人对route map的简单理解:route map类似一张表,其中的每一个表项可以看做是比较复杂的static route。如:route map TEST permit 10match Amatch Bmatch Cset Aset Bset C意思就是在名为TEST的

2020-08-18 21:46:52 321

原创 UVA - 10037

别人写的题解:https://blog.csdn.net/qq_42505741/article/details/84852078做这道题应该要有个感觉,是有个迭代或规律的。没思路时可以枚举一下,应该枚举到n=4就可以得出个思路了。#include<cstdio>#include<iostream>#include<algorithm>#include...

2020-05-07 18:39:26 157

原创 UVA-120

模拟题。#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<queue>using namespace std;const int maxn=1e2+6;typedef lo...

2020-05-02 23:26:36 143

原创 牛客-计算机复试题-求图的连通分支数

求图的连通分支数可以用并查集实现。并查集的讲解推荐:https://blog.csdn.net/liujian20150808/article/details/50848646本题求的是无向图的连通分支数,用Python代码实现如下:"""无向或有向图的连通分治数可以用并查集求出来。并查集的本质是将图分成多棵树,每棵树是每个连通分支的树形表示,因此树的总数等于连通分支的总数并查集需...

2020-04-03 16:49:57 2068

原创 牛客-计算机复试题-Day of Week

语言是python。这题应该有一个很简单的方法,就是用库,不过我没去试,是自己推出来的。在写这篇博客的时候是2020.3.30,星期一,则得到下表:2020.3.30星期一2020.3.31星期二2020.4.1星期三2020.4.2星期四2020.4.3星期五2020.4.4星期六2020.4.5星期日原理就...

2020-03-30 18:34:33 137

原创 牛客-计算机复试题-Sum of Factorials

递归求解即可,一开始忘了考虑 0! 的情况,WA了几次。。def DFS(left, right, tmp_value, target): if tmp_value == target: return True if left >= right or tmp_value > target: return False for i ...

2020-03-13 10:00:04 117

原创 转发一些关于数据中心的文章

http://www.ruijie.com.cn/fa/xw-hlw/83944/大型数据中心网络路由协议选择http://www.ruijie.com.cn/fa/xw-hlw/84399/大型数据中心BGP路由协议规划

2020-03-12 22:09:46 214

原创 牛客-计算机复试-数字反转

被样例坑了两次。。212 3499 1最开始那个2是没有的。while True: try: num1, num2 = input().strip().split() str1 = str(int(num1[::-1]) + int(num2[::-1])) str2 = str(int(num1) + int(num2))[::...

2020-03-08 23:12:52 135

原创 牛客-计算机复试-Old Bill

两层循环,倒序枚举就好。while True: try: N = int(input().strip()) line = input().strip().split() middle = 0 for number in line: middle = middle*10 + int(number) ...

2020-03-08 22:20:51 182

原创 牛客-计算机复试-Simple Sorting

用python非常简单的就解决了。while True: try: N = int(input().strip()) line = input().strip().split() array = sorted(list(set([int(number) for number in line]))) for i in ran...

2020-03-08 21:22:46 98

原创 牛客-计科复试题-WERTYU

用python很方便就能解决这道题:字典+zip()。可能有更好的方案。right_to_left = {}a1 = ['`'] + [str(digit) for digit in range(1, 10)] + ['0', '-', '=']a1 = dict(zip(a1[1:], a1[:-1]))a2 = ['~', '!', '@', '#', '$', '%', '^',...

2020-03-04 13:21:34 176 1

原创 牛客-计算机考研复试上机题-二次方程计算器

这道题其实考察的是对字符串的处理。显然我们要将方程化为ax2+bx+c=0的形式,因此可以找出式子中所有x2、x的系数以及c。但是题目的输入是一个完整的字符串,如果暴力遍历的话会很麻烦,于是就想到把式子中的x2, x, c分开来。这用python其实很方便(其他语言不清楚,C/C++可能暴力会更简单)。用python 40+行就能解决这道题。def getNumber(string, st...

2020-03-03 13:29:51 319

原创 牛客-计算机历年考研复试上机题-反序输出

python利用字符串切片的方法,可以很方便的实现反序输出。while True: try: string = input().strip() print(string[::-1]) except: break```

2020-02-29 22:00:11 143

原创 牛客-计算机历年考研复试上机题-成绩排序

其实很简单,但是本人刚接触Python,对Python还很陌生,所以就实现起来还是遇到了困难,主要是排序那块。版本一,直接用sort()方法就好了,Python排序的内部实现是稳定的,因此相对顺序不会变。class Student(object): def __init__(self, name=None, scores=0, order=0, m=0): sel...

2020-02-29 21:43:48 241

原创 python networkx

转发一篇networkx的博客。https://blog.csdn.net/qq_32284189/article/details/80134768

2020-02-23 15:02:27 168

原创 python debug

转发一篇python debug的博客。https://www.cnblogs.com/xyou/p/8477283.html

2020-02-23 14:57:43 212

原创 python lambda表达式

转发一篇简洁而明了的python lambda表达式解析:https://www.cnblogs.com/caizhao/p/7905094.html

2020-02-23 09:29:29 128

原创 SRv6简介

本文是读C. Filsfils et al. 所著的Segment Routing第一卷第十二章所作的总结与摘要。当使用SR IPv6数据平面传送IPv6数据包 (通常称为SRv6) 时,Segment List被压入到数据包报头中的SR报头 (SRH) 中。该报头是新类型的路由报头,路由报头是IETF RFC 2460中描述的一种扩展报头。SRH中的指针指向编码在报头中的Segment Lis...

2020-02-22 18:25:39 16499

原创 计算机网络——数据链路层

本文是在读谢希仁所著的《计算机网络》第7版的第三章后所做的总结与摘要。数据链路层需要解决三个基本问题:1)封装成帧。2)透明传输:在 “数据链路层透明传送数据” 表示无论什么样的比特组合的数据,都能够按照原样没有差错地通过这个数据链路层。具体在PPP协议中,还需要通过字节填充/零比特填充的方法来保证帧的数据部分中的控制字符不会被解释为帧首/尾部中控制字符3)差错检测:采用循环冗余检验CRC...

2020-02-18 15:38:13 487

原创 Segment Routing IGP Control Plane

本文是在读C. Filsfils et al.所著的Segment Routing第一卷第5章后所做的总结。因为知识和能力有限,本章很多内容还没有理解,因此这里呈现的是极简版的。通过扩展IGP协议ISIS和OSPF,使其在既有的分发拓扑和可达性信息的同时,在IGP域内分发SR信息。IGP域中的每个节点使用附加的SR信息,连同其计算出来的网络拓扑视图和前缀可达性信息一起,来构造转发表项。 IGP...

2020-02-16 16:40:30 767

原创 SR MPLS Data Plane

本文是在读C. Filsfils et al. 所著的Segment Routing第一卷第三章后所做的总结。现有MPLS数据平面SR可以直接应用于MPLS架构,而不需要改变MPLS数据平面。这意味着通常只需要软件升级就可以在节点上启动基本的SR功能,因为现有的MPLS转发硬件可用于SR MPLS。在SR MPLS实现中,SID在数据平面中被编码为MPLS标签。Segment List被编码...

2020-02-15 20:58:46 901 1

空空如也

空空如也

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

TA关注的人

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