python的各种模板

说实话,我觉得想要参加icpc就要有自己的模板,所以我要写这篇文章,大家有什么好用的py模板也可以给我发一下,我非常需要!!!

我会持续更新这篇文章!!!

每次刷题有关于模板的我都要放在这里!!!

一下是模板(从今天开始积累,不只是模板,还有知识点!!!)

gcd(最大公约数)

lcm(最小公倍数)

import math

# 求最大公约数(GCD)
def gcd(a, b):
    return math.gcd(a, b)

# 求最小公倍数(LCM)
def lcm(a, b):
    return abs(a * b) // math.gcd(a, b)

从0开始到n的连续整数^运算的规律(规律如下函数)这个在牛客的周赛round49D题可以用到     链接:D-嘤嘤不想求异或喵_牛客周赛 Round 49 (nowcoder.com)(这道题需要一点点推理,但是确确实实可以用到这个结论)

def jisuan(n):
    if n % 4 == 0:
        return n
    elif n % 4 == 1:
        return 1
    elif n % 4 == 2:
        return n + 1
    elif n % 4 == 3:
        return 0

求子数组的最大值时,可以使用前缀和max(前缀和 - 最小前缀和)                                       

leetcode:53. 最大子数组和 - 力扣(LeetCode)                                                                         

牛客:C-嘤嘤不想买东西喵_牛客周赛 Round 49 (nowcoder.com)

divmod函数

# 使用 divmod() 计算商和余数
a = 20
b = 3
quotient, remainder = divmod(a, b)

leetcode3099

3099. 哈沙德数 - 力扣(LeetCode)

collections.defaultdict()这个函数,用起来非常不错,可以非常便捷的创建一个字典。

from collections import defaultdict

# 使用int作为默认工厂函数的示例defaultdict
my_dict = defaultdict(int)

# 对一个尚不存在的键进行增量操作
my_dict['a'] += 1
print(my_dict)  # 输出: defaultdict(<class 'int'>, {'a': 1})

# 访问尚未明确设置的键
print(my_dict['b'])  # 输出: 0 (int的默认值)
print(my_dict)  # 输出: defaultdict(<class 'int'>, {'a': 1, 'b': 0})

dic = defaultdict(list)
dic[1].append(1)
print(dic) #输出:defaultdict(<class 'list'>, {1: [1]})

一个可以快速对字母排序的方式:

  • 这一行对字符串 a 进行排序,并将排序后的字符重新组合成一个新的字符串。例如,对于输入的字符串 "acandjakddbhkcfnia",排序后会变成 "aaaabccdddfhijkknn"。
a = 'acandjakddbhkcfnia'
a = ''.join(sorted(a))
print(a) #输出:'aaaabccdddfhijkknn'

今天又涨知识了:

列表变成字符串

#方法1也是最慢的方法,时间复杂度O(n**2)
s = ['a', 'b', 'b', 'v']
a = ''
for i in s:
    a += i
print(a)
#方法2  时间复杂度O(n)
s = ['a', 'b', 'b', 'v']
result = ''.join(s)
print(result)
#方法3  时间复杂度O(n)
s = ['a', 'b', 'b', 'v']
print(*s,sep = '')

二分查找函数

def binary_search(alist, item, front):
    first = 0
    last = len(alist) - 1
    while first <= last:
        midpoint = (first + last) // 2
        if alist[midpoint] == item:
            return midpoint
        elif item < alist[midpoint]:
            last = midpoint - 1
        else:
            first = midpoint + 1
    if front == 'right':
        return first
    else:
        return first - 1
testlist = [0, 1, 2, 8, 13, 17, 19, 32, 42]
print(binary_search(testlist, 3, 'left'))
print(binary_search(testlist, 13,'left'))

python求数组nums中所有数对q的差的最小值模板函数:

前缀和函数也就是accumulate是python3.8.19更新的

二分查找函数bitsct_left是python3.12.4更新的

from itertools import accumulate
from bisect import bisect_left
def modified_sum(nums, q):
    n = len(nums)
    nums.sort()
    s = list(accumulate(nums, initial=0))
    j = bisect_left(nums, q)
    left = q * j - s[j]
    right = s[n] - s[j] - q * (n - j)
    ans = left + right
    return ans
print(modified_sum([1,8,7,5,2,6,4,7],5)) #16

今天在leetcode上面发现了之前收藏的几个不错的东西,直接放进来!!!

求助丨有没有常用python内置函数总结 - 力扣(LeetCode)

Python3 | 数论相关算法与函数 - 力扣(LeetCode)

python写对拍

链接:Python在竞赛中的应用-测试数据的构造与对拍 --算法专题精解(31)_对拍 python实现-CSDN博客

目前能想到的就这些 ,随着我不断刷题,我相信这个模板会更加完善!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值