
算法
望舒向晚
chaos is a ladder,but for those who climb
展开
-
蓝桥杯最小生成树 最短路径python
Kruskal算法适合于稀疏图(贪心)Prim算法适合于稠密图或者完全图连接所有点的最小费用def root(x): if p[x]!=x: p[x]=root(p[x]) return p[x]def union(x,y): if root(x)==root(y): return False if root(x)!=root(y): p[root(x)]=root(y)原创 2022-04-08 19:52:09 · 935 阅读 · 0 评论 -
蓝桥杯 python并查集
并查集并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题并查集的思想是用一个数组表示了整片森林,树的根节点唯一标识了一个集合,我们只要找到了某个元素的树根,就能确定它在哪个集合里。n,m=map(int,input().split())p=[i for i in range(n+1)]def root(x): if p[x]!=x: p[x]=root(p[x]) return p[x]def union(x,y): ...原创 2022-04-03 19:39:12 · 1254 阅读 · 0 评论 -
CCF CSP python
from collections import Countern=int(input())arr=[int(i) for i in input().split()]arr.sort()arr=Counter(arr)arr=arr.most_common(1)[0]print(arr[0])n=int(input())arr=[int(i) for i in input().split()]arr.sort()max=0index=0for i in ...原创 2022-04-01 20:50:13 · 725 阅读 · 0 评论 -
python BFS
BFS基于队列实现原创 2022-03-31 10:10:31 · 131 阅读 · 0 评论 -
2022蓝桥杯python笔记 题库
ord()是chr()的配对函数,返回对应的ASCII码值s=input()ans=0for i in range(len(s)): for j in range(i+1,len(s)): ans+=abs(ord(s[i])-ord(s[j]))print(ans)deque结构可以看作是内置的list结构的加强版,提供了在两端插入和删除的操作。import collections#上下左右四个方位对应x=[1,0,-1,0]y=[0,...原创 2022-03-24 20:18:00 · 1250 阅读 · 0 评论 -
选第二大元素python(分治)
给定n个元素,找出元素中的第二大元素。该问题如果用线性扫描的方法的话,首先找出最大值,比较n-1次然后从n-1个元素中找出最大值,比较n-2次下面考虑设计一个选第二大元素的分治算法1.将n个元素从中间一分为二2.递归两个子问题,分别求出两个子问题的最大值,同时将被淘汰的较小元素记录在较大元素的列表中。在最大值的淘汰元素列表中找第二大元素。实现用字典存储被较大元素淘汰的元素,每个元素的key是给定的n个元素,value是一个列表,包括所有被该元素淘汰的元素1.首先定义一个f..原创 2022-03-23 20:13:04 · 2738 阅读 · 0 评论 -
保研数据结构复习
Hash函数的构造方法目标:使所有元素的哈希地址尽可能均匀地分布在m个连续内存单元上1.直接定址法2.除留余数法最经常使用的一种哈希函数3.数字分析法hash冲突的解决方法:装填因子:指哈希表中已存入的元素数n与哈希地址空间大小m的比值,即a=n/m。装填因子越小,冲突的可能性就越小开放定址法:1.线性探测法容易产生堆积问题。2.平方探测法可以避免出现堆积问题缺点:不一定能探测到哈希表上的所有单元,但最少能探测到一半单元。拉链法...原创 2022-03-16 20:17:11 · 1564 阅读 · 0 评论 -
2021蓝桥杯python真题及习题 石子的游戏
s.upper()相关函数s.upper() #把所有字符中的小写字母转换成大写字母s.lower() #把所有字符中的大写字母转换成小写字母s.capitalize() #把第一个字母转化为大写字母,其余小写s.title() #把每个单词的第一个字母转化为大写,其余小写 ord(s):获得字符 s 的 ASCII 值chr(s):获得数字 s 对应的字母ASCII码大小写字母之间的编号相差32,可以用这个转换for char in s...原创 2022-03-14 13:41:40 · 426 阅读 · 0 评论 -
python字符串逆序输出 range 步长
步长为-1原创 2022-03-12 21:57:59 · 677 阅读 · 0 评论 -
python 切片操作 列表排序sort 和sorted 可变序列 列表常用函数
切片操作切片适用于列表、元组、字符串、range对象等类型,但作用于列表时功能最强大。可以使用切片来截取列表中的任何部分,得到一个新列表,也可通过切片来修改和增加、删除列表中部分元素切片使用两个冒号分隔的3个数字来完成:第一个数字表示切片的开始位置(默认为0)第二个数字表示切片截止位置(但不包括)(默认为列表长度)第三个数字表示切片的步长(默认为1),当步长省略时可以顺便省略最后一个冒号切片操作不会因为下标越界而抛出异常,而是简单地在列表尾部截断或者返回一个空列表,代码具有更..原创 2022-03-10 11:16:16 · 2238 阅读 · 0 评论 -
leetcode lintcode python
动态规划的题目分为两大类,一种是求最优解类,典型问题是背包问题,另一种就是计数类,比如这里的统计方案数的问题,它们都存在一定的递推性质。前者的递推性质还有一个名字,叫做 「最优子结构」 ——即当前问题的最优解取决于子问题的最优解,后者类似,当前问题的方案数取决于子问题的方案数。所以在遇到求方案数的问题时,我们可以往动态规划的方向考虑。原创 2022-03-09 14:08:35 · 440 阅读 · 0 评论 -
P1119 【灾后重建】 python Floyd
vnum,rnum=map(int,input().split())t=[]t+=[int(x) for x in input().split()]d=[[1e9 for i in range(vnum)] for i in range(vnum)]for i in range(vnum): d[i][i]=0for i in range(rnum): a,b,c=map(int,input().split()) d[a][b]=d[b][a]=cask=...原创 2022-03-08 15:35:24 · 276 阅读 · 0 评论 -
洛谷 python P1908 逆序对 归并
def merge_sort(a): s = 0 if len(a) <= 1: return mid = len(a) // 2 l = a[:mid] r = a[mid:] s += merge_sort(l) + merge_sort(r) i = j = k = 0 while(i < len(l) and j &l...原创 2022-02-25 11:28:28 · 774 阅读 · 0 评论 -
洛谷P1257 平面上的最接近点对 python
from math import sqrtn=int(input())arr=[[10] for i in range(n)]ans=100000000for i in range(n): arr[i]=input().split() arr[i]=[int(j) for j in arr[i]]def DFS(depth,last): global ans if depth>n: return for i in ...原创 2022-02-24 21:01:16 · 632 阅读 · 0 评论 -
洛谷pythonP1228 地毯填补问题 分治
import mathk=int(input())x,y=map(int,input().split())length=pow(2,k)#x1,y1公主所在位置 x2,y2正方形左上角位置def solve(x1,y1,x2,y2,length): if(length==1): return if(x1-x2<=length/2-1 and y1-y2<=length/2-1):#左上角 print(int(x2+length...原创 2022-02-24 09:51:26 · 515 阅读 · 2 评论 -
洛谷P2678 [NOIP2015 提高组] 跳石头python二分答案
设定一个最短跳跃距离,然后移动石头以达到该距离,如果移动次数大于给定次数,说明距离过大,反之距离过小。distance,num,time=map(int,input().split())jump=[0]*50000for i in range(num): jump[i]=int(input())l=0r=distanceans=0while(l<=r): mid=int((l+r)/2) now=0 sum=0 for i...原创 2022-02-24 01:15:00 · 503 阅读 · 0 评论 -
洛谷 P1873 [COCI 2011/2012 #5] EKO / 砍树 python二分查找
在[0,max(height)]上进行二分查找N,M=map(int,input().split())long=[]long+=[int(x) for x in input().split()]r=max(long)l=0ans=0def check(mid): sum=0 for i in range(N): if long[i] >mid: sum+=long[i]-mid return sum&...原创 2022-02-23 09:44:57 · 545 阅读 · 2 评论 -
洛谷P1163 银行贷款python倍增
当p小于正确答案时,左式就会小于右式。反之左式就会大于右式倍增即每次将考虑的范围扩大或减少一倍从而加速n,m,t=map(int,input().split())def cmp(x): #比较当前的答案是否偏小 month,sum=1,0 for i in range(0,t): month/=(1+x) sum+=month return sum>n/m #倍增p,k=0.000000...原创 2022-02-22 20:16:17 · 595 阅读 · 0 评论 -
线段树树状数组扫描线
线段树是一种二叉搜索树,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶子节点。使用线段树可以快速的查找某一个节点在若干条线段中出现的次数,时间复杂度为O(logN)。而未优化的空间复杂度为2N,实际应用时一般还要开4N的数组以免越界,因此有时需要离散化让空间压缩。对于线段树中每一个非叶子节点(即长度大于单位长度)[a,b],它的左儿子表示的区间为[a,(a+b)/2],右儿子表示的区间为[(a+b)/2+1,b],因此线段树是平衡二叉树。最简单的应用就是记录线段是否被覆原创 2022-02-22 03:45:00 · 379 阅读 · 0 评论 -
KMP algorithm
消除了主串指针的回溯,通过分析模式串从中提取出加速匹配的有用信息暴力的匹配过程是第一趟从s0和t0比较开始,第2趟从s1和t0比较开始,第三趟从s2和t0比较开始,依次类推。而KMP算法的第一趟从s0和t0比较开始,第2趟不一定从s1开始,所以和暴力算法相比可能会减少匹配的趟数...原创 2022-02-21 02:15:00 · 164 阅读 · 0 评论 -
python动态规划最长公共子序列加工顺序
最长公共子序列设Zk是序列Xm和Yn的最长公共子序列(1)若zk=xm=yn,则Zk+1是Xm-1和Yn-1的最长公共子序列(2)若xm≠yn,xm≠zk,则Zk是Xm-1和Yn的最长公共子序列(3)若xm≠yn,yn≠zk,则Zk是Xm和Yn-1的最长公共子序列反证即得def LCS(A,B): n=len(A) m=len(B) A.insert(0,'0') B.insert(0,'0') #二维表c存放公共子序列的长度 c=[原创 2022-02-21 05:00:00 · 735 阅读 · 0 评论 -
洛谷 贪心 部分背包 线段覆盖 排队接水 python
## P2240 【深基12.例1】部分背包问题数据结构选择python没有结构体,选用二维数组(物品价值、重量)存储单个物品方便排序```pythonnum,capacity=map(int,input().split())arr=[[10000000,0.1] for i in range(101)]for i in range(num): arr[i]=input().split() arr[i]=[int(j) for j in arr[i]]# ...原创 2022-02-17 14:09:20 · 768 阅读 · 0 评论