11 2022 档案
摘要:1、import/from as 语句 # import/from as 语句主要是为了简化import/from语句 import numpy as np # 后边对numpy的引用可以直接用np,但是也只能用np,numpy会失效
阅读全文
摘要:一、kmp算法 1、基本概念 模式串:P 匹配串:T kmp算法精髓:找打一个最大的x,使得T[s+1,...,s+k]的后x个字符,和P的前x个字符相同。 2、next数组 next数组:记录模式串最长公共前后缀 3、相关代码 //求next数组伪代码 next[1] = 0 k = 0 for
阅读全文
摘要:一、字符串相关知识 1、字串:连续区间的串 2、子序列:可以不连续的串,但是相对位置要保持一致 3、sprintf、sscanf(对char类型而言) 4、string append(s, pos, n) // 将字符串 s 中,从 pos 开始的 n 个字符连接到当前字符串结尾。 replace(
阅读全文
摘要:Clock 题意:给一些时间,24小时制,给一个初始出发时间,问在钟表上最少转多少度能把所有给的时间都经历一遍。 思路:分四种情况模拟。 注意: 求的是度数,所以最后要乘6转换。 3:00,转到15:00,需要转动0度。 取模要对一圈取模,mod = 43200。 #include<bits/std
阅读全文
摘要:一、字典的概念 #示例代码 student = {'name':'xx','name':'yy','grade1':98.1,'grade':99.2} print(student) #output: {'name':'yy','grade1':98.1,'grade':99.2} 字典的特征: 字
阅读全文
摘要:F Auxiliary Set 树上LCA + DFS 注意一下输出格式! #include<bits/stdc++.h> using namespace std; const int N = 1e5 + 10; int t, n, q, ans; int fa[N]; // 存储点i的父亲节点 i
阅读全文
摘要:B - Bracket Sequence 思路: 用一个flag来标记括号的数目,如果括号数目是个偶数的话,就代表当前要执行'+'操作,反之就是'*'操作。对于最外层的数,是没有计算的。 所以最后要单独判断栈是不是空的,如果不是空的,还要把这些数弹出来进行计算。 想差了一点,应该是计算完一个括号之后
阅读全文
摘要:C. Manipulating History 题意:给出一些字符串,有原始串(只含一个字符的串)、被替换的串、替换串、 最终串(最后一行),求原始串。 2 a ab b cd acd Initially s is "a". In the first operation, Keine chooses
阅读全文
摘要:D. Required Length 题意:给你一个长度n,一个数x,x每个后续状态可以由前一个状态乘以前一个状态的某一位上的数字得到,问最少多少步,能把x变成一个n位数。如果不能变成n位数,输出-1。 思路:bfs + map。map用来记录第一次到达某个数所要经过的步数,第一次找到的值就是步数的
阅读全文
摘要:1、E - Fridge 教训:做题的时候,没有想清楚问题,把问题复杂化了 #include <bits/stdc++.h> #define int long long using namespace std; const int N = 1010; string st; int cnt[N], m
阅读全文
摘要:C. Sum of Substrings 题目大概意思,给你一个01串,求和最小,其中和是该串所有相邻字符所组成的十进制数的和。 如:0110, sum = 01 + 11 + 10 = 22。 通过观察我们可以发现,除了第一个位置和最后一个位置,其他位置上的1对和的贡献都是11。 所以我们只需要特
阅读全文
摘要:Frogger 法一:floyd #include<iostream> #include<cstring> #include<algorithm> #include<cstdio> #include<cmath> #include<iomanip> #define int long long int
阅读全文
摘要:G water testing 题意:给你一个多边形(可能是凸多边形,也可能是凹多边形),问该多边形内有多少个整数点(不包含边界)。 思路:皮克定理 + 叉乘计算三角形面积:皮克定理是指一个计算点阵中顶点在格点上的多边形面积公式,该公式可以表示为S=a+b÷2-1,其中a表示多边形内部的点数,b表示
阅读全文
摘要:F - Subarrays 题意:给你一个序列,问这个序列里有多少个子串的和能被k整除。 思路:求前缀和,然后每个位置对k取模,模数相等的位置之间,是一个满足条件的字串。 因为求的是前缀和,所以取模后相等,做差刚好去掉这个模后结果。 某个位置前面有多少个取模和该位置取模相等的数,用map记录一下。
阅读全文
摘要:E 爬塔 方法一:二分做法 预处理每个点所能到达的最远距离,存到vector里边,然后二分处理结果 #include<bits/stdc++.h> using namespace std; const int N = 1e5 + 10; int n, q, a[N], len, maxn; vect
阅读全文
摘要:Palindrome 题意:给一个字符串,问最少加上多少个字符,可以使这个字符串成为回文串 思路一、直接dp(会爆内存) dp[i][j]表示区间[i,j]之间有最少需要加上多少个字符 状态转移方程:如果s[i] = s[j], 则dp[i][j] = dp[i + 1][j - 1]; 如果s[i
阅读全文
摘要:[神坛]pta *相邻两条边围成的三角形面积会是最小的 极角排序+叉积计算三角形面积 #include<bits/stdc++.h> #define int long long using namespace std; const int N = 2e5 + 10; int n, m; double
阅读全文
摘要:很好的一道bfs题目,到达岸边可以看成是最后一步 #include<bits/stdc++.h> using namespace std; const int N = 1e5 + 10; int n, dist[N], pre[N]; double d, dis; struct node{ doub
阅读全文
摘要:在单调递增序列a中查找>=x的数中最小的一个(即x或x的后继) while(l<r) { int mid=(l+r)/2; if(a[mid]>=x) r=mid; else l=mid+1; } return a[l]; 在单调递增序列a中查找<=x的数中最大的一个(即x或x的前驱) while(
阅读全文
摘要:一、相关概念: 1、二分图 把图中的点分到两个集合中,集合内的点之间没有边相连,边存在于两个集合之间 2、匹配、最大匹配、完美匹配 匹配:设G为二分图,若在G的子图M中,任意两条边都没有公共节点,那么称M为二分图G的一组匹配。 最大匹配:一个图的所有匹配中,所含匹配边数最多的匹配 完美匹配:存在某种
阅读全文
摘要:四、编程部分 1、sorted函数: sorted(iterable, cmp=None, key=None, reverse=False) #iterable:可迭代的对象 #cmp:比较规则 #key:用来进行比较的对象,只有一个参数 2、eval()函数:
阅读全文
摘要:一、基本概念 1、链式区间dp for(int len = 2; len <= n; len++){ //枚举区间长度 for(int i = 1; i + len - 1 <= n; i++){//枚举左边界 int j = i + len - 1; //有边界 for(int k = i; k
阅读全文
摘要:1、贪心算法的基本性质: 贪心选择性质: 所求问题的整体最优解,可以通过一系列局部最优的选择,即贪心选择来达到。 贪心算法只有在具有贪心选择性质时才能保证获得整体最优解。 最优子结构性质: 一个问题的最优解包含其子问题的最优解。 2、贪心算法与动态规划算法异同 |算法|特点| |-|-| |动态规划
阅读全文
摘要:1、多组输入没有结束标志的两种表示形式 #method1: try: while True: #代码 except EOFError: pass #method2: while True: try: #代码 except: break 2、python的print()函数相关用法 3、range(s
阅读全文
摘要:1、基本概念 哈夫曼编码是广泛地用于数据文件压缩的十分有效的编码方法。其压缩率通常在20%~90%之间。哈夫曼编码算法用字符在文件中出现的频率来建立一个用0,1串表示各字符最优表示方式。 给出现频率高的字符较短的编码,出现频率较低的字符以较长的编码,可以大大缩短总代码长。 计算文件总码长 2、前缀码
阅读全文
摘要:1、快读相关代码 inline int read() { int x=0,f=0; char ch=getchar(); while(!isdigit(ch))f|=(ch=='-'),ch=getchar(); while(isdigit(ch))x=(x<<1)+(x<<3)+(ch^48),c
阅读全文
摘要:1、Cut Ribbon 思路一:数据范围很小,考虑直接枚举。 #include<bits/stdc++.h> #define int long long using namespace std; int n, p, q, r; signed main(){ cin >> n >> p >> q >
阅读全文
摘要:一、列表的概念 1、列表的创建 列表是由一组任意类型的值组合而成的序列,组成列表的值称为元素,每个元素之间用逗号隔开。 列表中的元素是可变的 #列表类似于c++中的数组,数组下标从0开始 list1 = [a, b, c] list2 = [a,] #通过list()函数创建列表 list1 = l
阅读全文
摘要:1、基本概念 BKDRHash的基本思想就是把一个字符串当作一个k进制数来处理。 2、代码: #define int unsigned long long //这种情况是使用自然溢出 const int mod = 1e9 + 7; int prime = 19;//取一个素数 int BKDRHa
阅读全文
摘要:一、状态压缩DP概述 1、概念 状态压缩dp通过将状态转换成整数,来实现状态转移。 前置知识:位运算(&、|、!、^) 当要处理一些集合问题的时候,可以将状态转换为整数,运用二进制相关知识解决问题。 二、例题 1、互不侵犯 分析: 前一行会决定后一行的选择 状态转移方程:$f[i][j][k] +=
阅读全文
摘要:###一、搜索算法概述 算法的节点优先级取决于节点到起点的花费。 算法的优先级,取决于节点到终点的花费(无法解决起点和终点之间存在障碍物的情况)。 搜索算法节点的优先级计算公式(启发函数): 是节点$n
阅读全文
摘要:chapter 2 编程基础 一、基本语法 1、注释 python注释以开始 多行注释使用三个单引号/双引号作为开始和结束标志 2、标识符与关键字 python命名时避免使用下划线(下划线对解释器有着特殊的意义) 标识符严格区分大小写 python常见关键字打印: import keywo
阅读全文
摘要:##chapter 1 python开发入门 1、python之父:Guido van Rossum 2、python语言的特征: 简单 易学 免费&开源 可移植性 解释性 面向对象 在面向对象的语言中,程序是由数据和功能组合而成的对象构建起来的。 可扩展性:部分语言可以用C/C++编写,然后再py
阅读全文
摘要:##chapter2 ###一、选择填空判断部分 1、 C语言中,变量变的是内存空间中的值,不变的是地址; Python中,变量变的是地址,不变的是内存空间中的值。 2、 3、bool('False') 的返回值是True。 bool(False) 的返回值是False。 bool(None)的返回
阅读全文
摘要:##chapter 1 ###一、选择判断部分 1、高级语言程序要被机器执行,只有用解释器来解释执行。(F) 计算机高级语言按程序的执行方式可以分为编译型和解释型两种。 | 执行方式 | 跨平台 | 特点 | 缺点 | 代表语言 | | | | | | | | 解释型 | 可以跨平台 | 每次用都得
阅读全文
摘要:方法1、分治求解求最大子段和 思路: 分治法的设计思想是,将一个难以直接解决的大问题,分割成一些规模较小的相同问题。 对于一个序列来说,它的最大值有三种情况,第一种是左半部分的最大值,第二种是右半部分的最大值,第三种是左半部分右边的最大值+右半部分左边的最大值(有点类似于线段树维护最大和的问题)。
阅读全文
摘要:1、python数制转换 输入一个整数和进制,转换成十进制输出。 输入格式: 在一行输入整数和进制,用英文半角字符逗号“,”分隔。 (2个整数之间可能有空格) 输出格式: 在一行输出其十进制数值。 方法一: a,b=eval(input()) print(int(str(a),b)) 方法二: a,
阅读全文
摘要:状态转移方程:dp[i] = dp[i - 1] + dp[i - 2]。 当前行,可能是由上一行转移过来的,那么当前行就只能横着铺,所以方案数是dp[i - 1]。 当前行,可能是由i-2行转移过来的, 那么就只有竖着铺俩这种方案(横着铺俩这种方案会与横着铺重复),所以是dp[i - 2]。 仔细
阅读全文