学习目标:
提示:熟悉练习前缀和、差分法、二维前缀和、二维差分、二阶差分
例如:https://github.com/alibaba/fastjson
- 刷题刷题刷题
学习内容
我是FW,两天做了一道题,还是记录下来吧:
作物杂交:
https://www.lanqiao.cn/problems/506/learning/
N,M,K,T=map(int,input().split())
#N 表示作物种类总数 (编号 1 至 N),M表示初始拥有的作物种子类型数量,K 表示可以杂交的方案数,T 表示目标种子的编号。
Time = list(map(int,input().split()))
ls=[]
ls+=list(map(int,input().split()))#ls表示已有的种子
#创建杂交列表
zajiao = [[] for i in range(N+1)]
for i in range(K):
x=list(map(int,input().split()))
max_time=max(Time[x[0]-1],Time[x[1]-1])
zajiao[x[-1]].append([x[0],x[1],max_time])
dp1=[float("inf") for i in range(N+1)] #作物培养时间初始化为无穷大
for i in ls:
dp1[i]=0#已拥有的种子
def dp(x,zajiao,Time):
if dp1[x]!=float("inf"): #已计算的作物直接返回
return dp1[x]
for i in zajiao[x]:
a=i[0]
b=i[1]
#print(a,b)
dp1[x]=min(dp1[x],max(dp(a,zajiao,Time),dp(b,zajiao,Time))+i[2])
return dp1[x]
print(dp(T,zajiao,Time))
直线(蓝桥杯)
这个填空题一定要思考全面呀,太多坑了,哭了。不要相信给的样例,自己用复杂点的多测试一下
set1 = set({})
def max_yin(x,y):
if x<0:
x=-1*x
elif y<0:
y=-1*y
m=min(x,y)
mx=1
for i in range(2,m+1):
if x%i==0 and y%i==0:
mx=i
return mx
for x1 in range(20):
for y1 in range(21):
for x2 in range(20):
for y2 in range(21):
if x1==x2 and y1==y2:
continue
elif x1==x2:
k_zi=80
k_mu=2
b_zi=x1
b_mu=x1
elif y1==y2:
k_zi=0
k_mu=0
b_zi=y1
b_mu=y1
else:
u=y2-y1
d=x2-x1
if u<0 and d<0:
u=u*-1
d=d*-1
elif d<0:
d*=-1
u*=-1
yin=max_yin(u,d)
k_zi=u//yin
k_mu=d//yin
yin_b=max_yin(y1*k_mu-k_zi*x1,k_mu)
b_zi=(y1*k_mu-k_zi*x1)//yin_b
b_mu=(k_mu)//yin_b
group=(k_zi,k_mu,b_zi,b_mu)
#print(group)
set1.add(group)
print(len(set1))
学习产出:
提示:这里统计学习计划的总量
例如:
- one problem