网站建设需要学些什么,广告制作公司转型,高端网站建设企业公司,广州企业建站素材并查集的使用# 并查集模板
N400
fa[]
def init(): # 初始化#xff0c;默认自身为根接点for i in range(N):fa.append(i)def merge(x,y): # 发现可以合并#xff0c;默认选x的根节点为根接点fa[find(x)]find(y)def find(x): # 相等就是根结点#xff0c;不然就递归查找根…并查集的使用# 并查集模板
N400
fa[]
def init(): # 初始化默认自身为根接点for i in range(N):fa.append(i)def merge(x,y): # 发现可以合并默认选x的根节点为根接点fa[find(x)]find(y)def find(x): # 相等就是根结点不然就递归查找根接点if fa[x]x:return xelse:fa[x]find(fa[x])return fa[x]# 并查集模板
Nint(800000) # 注意将初始并查集设置大一点不然可能出现段错误
fa[]
def init(): # 初始化默认自身为根接点for i in range(N):fa.append(i)def merge(x,y): # 发现可以合并默认选x的根节点为根接点global ansif find(x)!find(y): # 不同才合并ans-1fa[find(x)]find(y)def find(x): # 相等就是根结点不然就递归查找根接点if fa[x]x:return xelse:fa[x]find(fa[x])return fa[x]n,mmap(int,input().split())
k int(input())
ans n*m
init() # 初始化
for i in range(k):a,b map(int,input().split())merge(a,b)
print(ans) #合根多少次就有多少个合根植物
二分查找关于二分法的两个模板#在单调递增序列a中查找x的数中最小的一个即x或x的后驱
while (lowhigh):mid (lowhigh)//2if (a[mid]x):highmidelse:lowmid1#-----------------------------------------------------##在单调递增序列a中查找x的数中最小的一个即x或x的前驱
while (lowhigh):mid (lowhigh1)//2if (a[mid]x):lowmidelse:highmid-1
找x的第一个midlowhigh//2a[0,3,5,7,9,11,13]
# [0,1,2,3,4,5,6]
# low 0 high 6 mid 3 ----- low4 high 6
# low 4 high 6 mid 5 ----- low4 high 5
# low 4 high 5 mid 4 ----- low5 high 5
# break lowhigh5
# 找的是靠右的那一个
low0
highlen(a)-1
def search(low,high,x): # 查找的是后一个while (lowhigh):mid (lowhigh)//2 # (23)//22 偏左if (a[mid]x):highmidelse:lowmid1print(a[low])print(a[high])
search(low,high,10) # 查找结果10找x的第一个midlowhigh1//2a[0,3,5,7,9,11,13]
# [0,1,2,3,4,5,6]
# low 0 high 6 mid 3 ----- low3 high 6
# low 3 high 6 mid 5 ----- low3 high 4
# low 3 high 4 mid 4 ----- low4 high 4
# break lowhigh4
# 找的是靠左的那一个
low0
highlen(a)-1
def search(low,high,x): # 查找的是前一个while (lowhigh):mid (lowhigh1)//2 # (231)//23 偏右if (a[mid]x):lowmidelse:highmid-1print(a[low])print(a[high])
search(low,high,10) # 查找结果10一元三次方程求解#一半测试案例错误 已改正注意学会使用continue语句import os
import sys# 请在此输入您的代码
ans []
def f(x): # 函数return x*x*x*ax*x*bx*cd def search(x1,x2):for i in range(30):mid(x1x2)/2if f(x1)*f(mid)0:x2midelse:x1midans.append(x1)
a,b,c,d map(float,input().split())
for i in range(-100,100): # 100取不到最后需单独判断if f(i)0:ans.append(i)continueelse:if f(i)*f(i1)0: # 有根search(i,i1)if f(100)0:ans.append(100)ans.sort()
for i in ans:print({:.2f}.format(i),end )标注答案我感觉没判断f100处n input().split()
a,b,c,d eval(n[0]),eval(n[1]),eval(n[2]),eval(n[3])
def y(x):return a*x*x*xb*x*xc*xd
for i in range(-100,100):leftirighti1y1y(left)y2y(right)if y10: print({:.2f}.format(left),end )if y1*y20 :while (right-left) 0.001: #eps0.001mid (leftright)/2if y(mid)*y(right) 0: left midelse: right midprint({:.2f}.format(right),end )求立方根问题学会善用break语句continue语句之前写的有问题的(判断条件有问题的)t int(input())
for _ in range(t):a int(input())for i in range(0,10000,1):if i*i*ia and (i1)*(i1)*(i1)a: #问题处在这里例如求8时 i1,2if i*i*ia:print({:.3f}.format(i))breakelse:lefti;righti1for _ in range(10):mid(leftright)/2if mid*mid*mid a:rightmidelse:left midprint({:.3f}.format(left))break#自我改进写法,改正后答案t int(input())
for _ in range(t):a int(input())for i in range(0,10000,1):if i*i*ia:print({:.3f}.format(i))breakif i*i*ia:lefti-1;rightifor _ in range(10):mid(leftright)/2if mid*mid*mid a:rightmidelse:left midprint({:.3f}.format(left))break
分蛋糕问题#暴力方法做的 75%通过率会超时import os
import sys# 请在此输入您的代码
n,k map(int,input().split())
length 1
save[]
for i in range(n):save.append(list(map(int,input().split())))
for i in range(1,1000): #遍历大小mark0for x,y in save:mark (x//i)*(y//i)if markk: # 当前分法不够分continuelength max(length,i)
print(length)
#二分法解决注意是找x的第一个应该用
mid(leftright1)//2 True:leftmidFalse:rightmid-1import os
import sys# 请在此输入您的代码
def check(d): # 检查蛋糕大小为d是否可分num 0for i in range(n):num(w[i]//d)*(h[i]//d)if(numk):return Trueelse:return Falseh [0]*100010
w [0]*100010
n,k map(int,input().split())
for i in range(n): # 读入蛋糕大小h[i],w[i] map(int,input().split())L,R 1,100010 # 结尾更大防止出现边界问题
while LR:mid(LR1)//2 #偶数中值为左值 [1,2] --1 ,没有则取后if(check(mid)): # 当前分发可分二分法取左值Lmidelse:Rmid-1
print(L)翻硬币问题贪心从左到右遍历。关键在与当发现不同只需要更改后面的值即可同时ansimport os
import sys# 请在此输入您的代码
ans0
# 因为要反转即改变值字符串不能改变所以转为列表处理
begin list(input())
end list(input())
for i in range(len(begin)-1): # 每次翻两个只能遍历到 [1 - n-1]if begin[i]!end[i]: # 翻转if begin[i1]*:begin[i1]oelse:begin[i1]*ans1 #记录翻转次数
print(ans)
巧克力n, kind map(int, input().split())
all_list [] # 存储信息
for i in range(kind):info_list [int(i) for i in input().split( )]all_list.append(info_list)
all_list.sort(keylambda x: x[0]) # 按照单价从大到小排序def solve(n, all_list):c 0days [i for i in range(1, n1)] # [1-n] 天days sorted(days, reverseTrue) # 从大到小排序for i in days:tmp_c 0for j in all_list:if j[2] 0: #还剩下货物if j[1] i: # 是否大于保质期tmp_c j[0]index all_list.index(j) # 更新剩余量all_list[index][2] - 1break # 记录了一天弄另一天if tmp_c 0:return -1else:c tmp_creturn cprint(solve(n, all_list))建议的写法根据单价排序后创建一个列表来记录每天吃什么首先判断是否还有然后判断是否过保质期没过就添加过了就选择下一款选择了就break选择下一天的食物n, kind map(int, input().split())
all_list [] # 存储信息
for i in range(kind):info_list [int(i) for i in input().split( )]all_list.append(info_list)
all_list.sort(keylambda x: x[0]) # 按照单价从小到大排序
#print(all_list)def solve(n, all_list):c 0days [i for i in range(1, n1)] # [1-n] 天#days sorted(days, reverseTrue) # 从大到小排序for i in days:tmp_c 0for j in all_list:if j[2] 0: #还剩下货物if j[1] i: # 是否大于保质期tmp_c j[0]index all_list.index(j) # 更新剩余量all_list[index][2] - 1break # 记录了一天弄另一天if tmp_c 0:return -1else:c tmp_creturn cprint(solve(n, all_list))顺子日期手算题import os
import sys# 请在此输入您的代码
# 2022 #非闰年 year%4000 or( year %40 and year%100!0)
#012 10 [0-9]
#02
#03
#04
#05
#06
#07
#08
#09
#10 1 12
#11 1 23
#123 2 [0-1]print(14)平方和送分import os
import sys# 请在此输入您的代码
ans0
mark[2,0,1,9]
for i in range(1,2020):#if( 2 or 0or 1or9 in str(i)): #这样的话相当于累加1-2019的所有数判定条件有问题for j in mark:if j in str(str(i)):ansi*ibreak
print(ans)
乘积求0送分a 5650 4542 3554 473 946 4114 3871 9073 90 4329
2758 7949 6113 5659 5245 7432 3051 4434 6704 3594
9937 1173 6866 3397 4759 7557 3070 2287 1453 9899
1486 5722 3135 1170 4014 5510 5120 729 2880 9019
2049 698 4582 4346 4427 646 9742 7340 1230 7683
5693 7015 6887 7381 4172 4341 2909 2027 7355 5649
6701 6645 1671 5978 2704 9926 295 3125 3878 6785
2066 4247 4800 1578 6652 4616 1113 6205 3264 2915
3966 5291 2904 1285 2193 1428 2265 8730 9436 7074
689 5510 8243 6114 337 4096 8199 7313 3685 211
a a.split()
b1
c0
for i in a:bb*int(i) #计算结果
bstr(b)
bb[::-1] # 倒叙查看看有多少个0
for j in b:if j0:c1else:break
print(c)蓝肽子序列审题思路上是求最大子序列需要注意将原来的序列分隔用到的方法有str.upper()方法以及注意索引出界问题同时将dp数组转为下标从1开始处理import os
import sys# 请在此输入您的代码
# 公共子序列问题
# 给他添加结尾便于分隔避免出现索引出界问题
ss1input()
ss2input()
s1[]
s2[]
# 分隔序列
temp_s
i0
while i len(ss1)-1:temp_sss1[i]if(ss1[i1] ):breakif(ss1[i1].isupper()):s1.append(temp_s)temp_si1
s1.append(temp_s)
temp_s
i0
while i len(ss2)-1:temp_sss2[i]if (ss2[i 1] ):breakif(ss2[i1].isupper()):s2.append(temp_s)temp_si1
s2.append(temp_s)dp[[0]*1001 for i in range(1001)]
for i in range(1,len(s1)):for j in range(1,len(s2)):if s1[i]s2[j]:dp[i][j]dp[i-1][j-1]1else:dp[i][j]max(dp[i-1][j],dp[i][j-1])
print(dp[len(s1)-1][len(s2)-1]) #下标索引从1开始
# print(s1)
# print(s2)
# s1012 len(s1) 3合唱队形#这里的代码思想贪心没有维护最值这些情况只能过10%的点有问题import os
import sys# 请在此输入您的代码
nint(input())
a list(map(int,input().split()))
#print(sorted(save)) # [130, 150, 160, 186, 186, 197, 200, 220]
# 原序列抽人不要动相应位置
i,j0,len(a)-1
ans0
while (ij):if(a[i]a[i1]):ans1i1continueif(a[j]a[j-1]):ans1j-1continuewhile a[i]a[i1]:i1while a[j]a[j-1]:j-1
print(ans)标准答案if __name__ __main__:# 输入并赋初值n int(input().strip())t list(map(int, input().split()))dp1 [1] * ndp2 [1] * n# 预处理从左往右LISfor i in range(1, n):for j in range(i):if t[i] t[j]:dp1[i] max(dp1[i], dp1[j] 1)# 预处理从右往左LISfor i in range(n - 1, 0, -1):for j in range(n - 1, i, -1):if t[i] t[j]:dp2[i] max(dp2[i], dp2[j] 1)maxx 0for i in range(n):maxx max(maxx, dp1[i] dp2[i] - 1)# 自己算了两次所以-1print(n - maxx)
文章转载自: http://www.morning.bwgrd.cn.gov.cn.bwgrd.cn http://www.morning.kwqcy.cn.gov.cn.kwqcy.cn http://www.morning.lchtb.cn.gov.cn.lchtb.cn http://www.morning.whclz.cn.gov.cn.whclz.cn http://www.morning.deupp.com.gov.cn.deupp.com http://www.morning.lwnwl.cn.gov.cn.lwnwl.cn http://www.morning.mzskr.cn.gov.cn.mzskr.cn http://www.morning.bklkt.cn.gov.cn.bklkt.cn http://www.morning.ncfky.cn.gov.cn.ncfky.cn http://www.morning.hmnhp.cn.gov.cn.hmnhp.cn http://www.morning.tnmmp.cn.gov.cn.tnmmp.cn http://www.morning.lbqt.cn.gov.cn.lbqt.cn http://www.morning.gllgf.cn.gov.cn.gllgf.cn http://www.morning.knqck.cn.gov.cn.knqck.cn http://www.morning.srbfp.cn.gov.cn.srbfp.cn http://www.morning.cbpkr.cn.gov.cn.cbpkr.cn http://www.morning.mzjbz.cn.gov.cn.mzjbz.cn http://www.morning.wnjwb.cn.gov.cn.wnjwb.cn http://www.morning.ykbgs.cn.gov.cn.ykbgs.cn http://www.morning.dmrjx.cn.gov.cn.dmrjx.cn http://www.morning.zknxh.cn.gov.cn.zknxh.cn http://www.morning.rgyts.cn.gov.cn.rgyts.cn http://www.morning.nbnq.cn.gov.cn.nbnq.cn http://www.morning.xdjsx.cn.gov.cn.xdjsx.cn http://www.morning.zlxrg.cn.gov.cn.zlxrg.cn http://www.morning.ktcrr.cn.gov.cn.ktcrr.cn http://www.morning.grxyx.cn.gov.cn.grxyx.cn http://www.morning.tklqs.cn.gov.cn.tklqs.cn http://www.morning.ffbp.cn.gov.cn.ffbp.cn http://www.morning.mfsjn.cn.gov.cn.mfsjn.cn http://www.morning.jybj.cn.gov.cn.jybj.cn http://www.morning.phxdc.cn.gov.cn.phxdc.cn http://www.morning.pcgjj.cn.gov.cn.pcgjj.cn http://www.morning.rxfjg.cn.gov.cn.rxfjg.cn http://www.morning.rxwfg.cn.gov.cn.rxwfg.cn http://www.morning.fssmx.com.gov.cn.fssmx.com http://www.morning.ktcrr.cn.gov.cn.ktcrr.cn http://www.morning.pkmw.cn.gov.cn.pkmw.cn http://www.morning.nqrfd.cn.gov.cn.nqrfd.cn http://www.morning.ghqyr.cn.gov.cn.ghqyr.cn http://www.morning.snktp.cn.gov.cn.snktp.cn http://www.morning.hbdqf.cn.gov.cn.hbdqf.cn http://www.morning.sbrjj.cn.gov.cn.sbrjj.cn http://www.morning.rgnq.cn.gov.cn.rgnq.cn http://www.morning.rcgzg.cn.gov.cn.rcgzg.cn http://www.morning.wkjzt.cn.gov.cn.wkjzt.cn http://www.morning.rdnpg.cn.gov.cn.rdnpg.cn http://www.morning.htqrh.cn.gov.cn.htqrh.cn http://www.morning.rqrh.cn.gov.cn.rqrh.cn http://www.morning.yltnl.cn.gov.cn.yltnl.cn http://www.morning.qkrqt.cn.gov.cn.qkrqt.cn http://www.morning.tbjtm.cn.gov.cn.tbjtm.cn http://www.morning.zgztn.cn.gov.cn.zgztn.cn http://www.morning.ntyanze.com.gov.cn.ntyanze.com http://www.morning.jxfmn.cn.gov.cn.jxfmn.cn http://www.morning.zrdqz.cn.gov.cn.zrdqz.cn http://www.morning.fpngg.cn.gov.cn.fpngg.cn http://www.morning.mdjtk.cn.gov.cn.mdjtk.cn http://www.morning.hxycm.cn.gov.cn.hxycm.cn http://www.morning.jzbjx.cn.gov.cn.jzbjx.cn http://www.morning.mbmtz.cn.gov.cn.mbmtz.cn http://www.morning.rpms.cn.gov.cn.rpms.cn http://www.morning.lzqdd.cn.gov.cn.lzqdd.cn http://www.morning.jcyrs.cn.gov.cn.jcyrs.cn http://www.morning.fjzlh.cn.gov.cn.fjzlh.cn http://www.morning.xbckm.cn.gov.cn.xbckm.cn http://www.morning.qnhpq.cn.gov.cn.qnhpq.cn http://www.morning.bmmyx.cn.gov.cn.bmmyx.cn http://www.morning.rkhhl.cn.gov.cn.rkhhl.cn http://www.morning.jqzns.cn.gov.cn.jqzns.cn http://www.morning.fthcn.cn.gov.cn.fthcn.cn http://www.morning.zxzgr.cn.gov.cn.zxzgr.cn http://www.morning.nhlyl.cn.gov.cn.nhlyl.cn http://www.morning.jqtb.cn.gov.cn.jqtb.cn http://www.morning.xfmwk.cn.gov.cn.xfmwk.cn http://www.morning.dfdhx.cn.gov.cn.dfdhx.cn http://www.morning.qynnw.cn.gov.cn.qynnw.cn http://www.morning.rjyd.cn.gov.cn.rjyd.cn http://www.morning.xshkh.cn.gov.cn.xshkh.cn http://www.morning.tsyny.cn.gov.cn.tsyny.cn