学考复习
学考复习……(?)
真的是复习吗
难道不是啥也没学过吗
不定期更新
感觉打一些比较熟的东西更容易上手一点
码的怎么现在学啥语言上来先学怎么封装
并查集
洛谷板子
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}
分别表示后面传进来的参数的编号(从
然后如果你想加限定参数,就可以直接像 {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 库里有二维数组的实现
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!