学考复习

学考复习……(?)

真的是复习吗

难道不是啥也没学过吗

不定期更新

感觉打一些比较熟的东西更容易上手一点

码的怎么现在学啥语言上来先学怎么封装

并查集

洛谷板子

n,m=map(int,input().split())
class dsu:
    def __init__(self,n):
        self.fa=[i for i in range(n+1)]
    def find(self,id):
        if self.fa[id]==id:
            return id
        else:
            self.fa[id]=self.find(self.fa[id])
            return self.fa[id]
    def join(self,x,y):
        fx=self.find(x)
        fy=self.find(y)
        if fx!=fy:
            self.fa[fx]=fy
    def samefa(self,x,y):
        fx=self.find(x)
        fy=self.find(y)
        return fx==fy
d=dsu(n)
for i in range(m):
    op,x,y=map(int,input().split())
    if op==1:
        d.join(x,y)
    else:
        print("Y") if d.samefa(x,y) else print("N")

线段树

洛谷板子

你说得对,但是 Python 线段树常数太大是怎么回事呢,Python 线段树常数太大,其实就是 Python 线段树过不了洛谷模板题,对此小编也感到非常奇怪,但是事实就是这样

n,m=map(int,input().split())
a=[int(i) for i in input().split()]
def midof(l,r):
    return ((l)+(r))//2
class segtree:
    def __init__(self,n):
        self.sum=[0 for i in range(n+1)]
        self.lazy=[0 for i in range(n+1)]
    def build(self,id,l,r):
        if l==r:
            self.sum[id]=a[l-1]
            return
        mid=midof(l,r)
        self.build(id*2,l,mid)
        self.build(id*2+1,mid+1,r)
        self.sum[id]=self.sum[id*2]+self.sum[id*2+1]
    def pushdown(self,id,l,r):
        if self.lazy[id]!=0:
            mid=midof(l,r)
            self.sum[id*2]+=(mid-l+1)*self.lazy[id]
            self.lazy[id*2]+=self.lazy[id]
            self.sum[id*2+1]+=(r-(mid+1)+1)*self.lazy[id]
            self.lazy[id*2+1]+=self.lazy[id]
            self.lazy[id]=0
    def change(self,id,l,r,L,R,val):
        if L<=l and r<=R:
            self.sum[id]+=(r-l+1)*val
            self.lazy[id]+=val
            return
        mid=midof(l,r)
        self.pushdown(id,l,r)
        if R<=mid:
            self.change(id*2,l,mid,L,R,val)
        elif L>=mid+1:
            self.change(id*2+1,mid+1,r,L,R,val)
        else:
            self.change(id*2,l,mid,L,mid,val)
            self.change(id*2+1,mid+1,r,mid+1,R,val)
        self.sum[id]=self.sum[id*2]+self.sum[id*2+1]
    def ask(self,id,l,r,L,R):
        if L<=l and r<=R:
            return self.sum[id]
        self.pushdown(id,l,r)
        mid=midof(l,r)
        if R<=mid:
            return self.ask(id*2,l,mid,L,R)
        elif L>=mid+1:
            return self.ask(id*2+1,mid+1,r,L,R)
        return self.ask(id*2,l,mid,L,mid)+self.ask(id*2+1,mid+1,r,mid+1,R)
t=segtree(n*4)
t.build(1,1,n)
for i in range(m):
    op=[int(i) for i in input().split()]
    if op[0]==1:
        t.change(1,1,n,op[1],op[2],op[3])
    else:
        print(t.ask(1,1,n,op[1],op[2]))

可能有点用的东西 1

关于怎么保留小数精度

我学的时候学的就是 python3 的 .format 方法,python2 的格式控制符我也不会,感觉不是很好用

.format 方法大概形如

print("{0}/{1}={2:.2f}".format(a,b,a/b))

前面那个字符串相当于是格式控制符,花括号括起来的代表一个变量,{0} {1} {2} 分别表示后面传进来的参数的编号(从 0 开始)

然后如果你想加限定参数,就可以直接像 {2:.2f} 一样在后面加(用冒号分隔),这里是保留两位小数

问了老师,评测用的是 Python3.7,可以使用

可能有点用的东西 2

Python 是有三目运算符的

形如

print("Yes") if flag==True else print("No")

意思是如果 flag==True 就输出 Yes,否则为 "No"

可能有点用的东西 3

关于列表推导式

除了 a,b,c=map(eval,input().split()) 这种没啥含金量的用法,还可以用列表推导式来生成列表

比如 A+B problem

a=[int(i) for i in input().split()]   //a is a list
print(a[0]+a[1])

或者可以跟一个 range

a=[i for i in range(5)]   //a=[0,1,2,3,4]

或者推导式可以直接在外面用

print(i) for i in range(5)

然后说到这个 for

如果你现在有一个 list,然后你要遍历它

可以用

a=[1,2,3,4,5,6]
for i in a:
    print(i)

可能有点用的东西 4

关于 Python 各种库

用处大的可能是 math 库

Python 导入库用的是 import

import math
print(math.ceil(2.4))

math 里有各种三角函数,取整(舍入)函数,取模,对数,gcd 等玩意

优先队列在 heapq 库里

numpy 库里有二维数组的实现

posted @   HaneDaniko  阅读(54)  评论(5编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示