鸦语笔记-python蓝桥杯

常规练习

十进制转化2进制

1、写函数采用 %2 的方式来算。

binary = lambda n: ‘’ if n==0 else binary(n/2) + str(n%2) binary(5)
‘101’

2、采用 python 自带了方法 bin 函数,比如 bin(12345) 回返回字符串 ‘0b11000000111001’, 这个时候在把0b去掉即可:

bin(12345).replace(‘0b’,’’)
‘11000000111001’

3、也可以采用字符串的 format 方法来获取二进制:

“{0:b}”.format(12345)
‘11000000111001’

十六进制转十进制

print(int(input(),16))

0-1背包问题

dp = [[0 for _ in range(C+1)] for _ in range(n+1)]
def ks(n,C):
    if dp[n][C]!=0:
        return dp[n][C]
    if n==0 or C==0:
        result = 0
    elif w[n] > C:
        result = ks(n-1,C)
    else:
        temp1 = ks(n-1,C)
        temp2 = v[n] + ks(n-1, C - w[n])
        result =max(temp1, temp2)
    #print(n,C,result)
    dp[n][C] = result
    return result
'''
n, C = list(map(int, input().split(',')))
w = v = [0]
for x in range(n):
    w1, v1 = list(map(int, input().split(',')))
    w.append(w1)
    v.append(v1)
'''


n,C = 3,5
w = [0, 1, 2, 3]
v = [0, 2, 4, 3]
res = ks(n,C)
print(res)
print(dp)
# 详见b站【蓝桥杯Python省赛集训】 https://www.bilibili.com/video/BV16M411M72d

基础练习 01字串

对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:

00000

00001

00010

00011

00100

请按从小到大的顺序输出这32种01串。

for i in range(2**5):
    print(f'{i:05b}')

​​​​​​蓝桥杯—入门训练—Fibonacci斐波那契数列(Python解法)icon-default.png?t=N7T8http://t.csdnimg.cn/W9zMp(保留疑问:为什么取余的结果和不取余结果一致)

20分钟速成排序+查找算法(含模板)——二分查找,冒泡排序,快速排序icon-default.png?t=N7T8http://t.csdnimg.cn/PMNmc

蓝桥杯必备模板(python蓝桥杯)icon-default.png?t=N7T8http://t.csdnimg.cn/B3aYf

统计器 Counter

from collections import Counter

cnt = Counter()

for word in ['red', 'blue', 'red', 'green', 'blue', 'blue']:
    cnt[word] += 1
print(cnt) # Counter({'blue': 3, 'red': 2, 'green': 1})

import re

words = re.findall(r'\w+', open('11.txt').read().lower())
print(Counter(words).most_common(10)) 
'''
[('the', 1143), ('and', 966), ('to', 762), ('of', 669), ('i', 631),
 ('you', 554),  ('a', 546), ('my', 514), ('hamlet', 471), ('in', 451)]
'''

判断闰年 calendar

import calendar 

print(calendar.isleap(2000)) # True
print(calendar.isleap(2100)) # False

算法总纲

算法基础

        语法基础

        变量、运算、输入输出、函数、结构体/类、内置库函数API

        语法进阶

        时间复杂度分析、枚举、模拟、递归、进制转换

        基础算法(高)

        倍增、构造、位算法、前缀和、差分、离散化、贪心、双指针、二分

        排序(低)

        冒泡排序、选择排序、插入排序、快速排序、归并排序、桶排序

        搜索(高)

        DFS基础、回溯、剪枝、记忆化、折半搜索

        基础数据结构(中)

        链表、栈、队列、堆、st表、树、树的基本概念、树的遍历、树的直径和重心

        图论基础(低)

        图的基本概念、图的遍历、拓朴排序

        动态规划基础(高)

        动态规划基础、线性dp模型

        背包问题(低)

        01背包、完全背包、多重背包、基础、二进制优化、单调队列优化、混合背包、二维费用背包、分组背包、属性依赖背包

        动态规划进阶(中)

        树形dp、区间dp、状压dp、数位dp、期望dp

        字符串匹配算法(低)

        KMP、Manacher、字符串hash、字典树、最小表示法

        数论基础(高)

        GCD、LCM、快速幂、矩阵快速幂、高斯消元、素数筛、唯一分解定理、约束定理、反素数

        图论算法和理论(低)

        最短路、floyd、SPFA、Dijkstra、最小生成树、Kruskal、Prim、图的连通、强连通分量、割点

算法提高

        数论进阶(中)

        费马小定理、欧拉定理、欧拉函数、欧拉降幂、威尔逊定理、中国剩余定理、扩展中国剩余定理、斐蜀定理、康托定理、康托展开、线性基、整除方块

        排列组合(低)

        排列组合基础、lucas定理

        树形数据结构(中)

        LCA、DFS序、树状数组、线段树、主席树、平衡树、Dsu On Tree

        计算几何基础(中)

        叉积的应用、点和线段的关系、点和直线的关系、点到直线的距离、点到线段的距离、线段相交判断、直线相关判断、线段上整点数

        高级数据结构(中)

        单调数据结构、单调栈、单调队列、二维单调队列、并查集、路径压缩、按秩合并、种类并查集、可持久化并查集、带权并查集、分块基础、莫队算法

        图论高阶应用(低)

        二分图判定、二分图最大匹配、二分图最大权匹配

        动态规划优化(低)

        斜率优化、四边形不等式优化、数据结构优化

        博弈论(低)

        尼姆博弈、反尼姆博弈、nim-K博弈、SG函数

算法进阶

建议深入理解和掌握以下几个方面,以提升解题能力和应对更复杂的挑战:

1. 动态规划高级技巧
  • 状态压缩DP
    在状态数目巨大时,使用位操作或其它编码方式减少状态空间。
  • 优化DP转移:熟练掌握斜率优化、单调队列优化、四边形不等式等高级优化技巧,以降低时间复杂度。
  • 空间优化:了解滚动数组、原地修改等技巧来减少空间消耗。
2. 图论高级主题
  • 网络流:包括最大流(如 Dinic 算法、Edmonds-Karp 算法)、最小割理论及其应用(如二分图匹配的KM算法)。
  • 树的高级算法:如树链剖分、重链剖分,以及它们在各种问题中的应用。
  • 图的染色与划分:理解并能应用图的着色问题、点覆盖、边覆盖等。
3. 数学与数论
  • 组合数学高级内容:学习并能够灵活运用生成函数、Polya 定理、容斥原理等解决复杂计数问题。
  • 数论高级技巧:深入理解模线性方程组、同余方程、Pollard rho 算法等,在大整数问题中寻找解。
4. 计算几何
  • 高级几何算法:凸包问题、旋转卡壳法、扫描线算法等,以及如何高效处理多边形、点集问题。
5. 字符串处理高级技术
  • 后缀数组:用于解决最长公共子串、模式匹配等问题的高效数据结构。
  • AC自动机:快速实现多模式字符串匹配。
6. 高级数据结构
  • TreapSplay TreeFenwick Tree(Binary Indexed Tree 的别称)等,以及这些数据结构在特定问题中的高效应用。
  • 在线算法与数据流:如Count-Min Sketch、Bloom Filter等,适用于大数据量下的近似计算和查询。
7. 算法设计策略
  • 分治法贪心策略概率算法等高级设计思路,以及如何结合多种方法解决综合问题。
8. 编程实践与调试能力
  • 提高代码质量,注重边界条件处理,学习调试技巧,提升问题定位和修正错误的速度。
9. 算法竞赛思维
  • 思维训练:通过大量练习,培养对问题的敏锐洞察力,快速识别问题类型和适用算法。
  • 压力测试:学会编写和使用压力测试程序,验证算法的正确性和性能极限。

  • 17
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值